由于对C的函数不是很清楚,所以想咨询一下
现在需要读取csv文件,可能出现很多行,每一行又有可能出现多余预计的列(预计只有2列,但想考虑错误处理的情况)
用什么函数比较合适呢?查到了fgets函数,但要指定长度,觉得是否不够灵活,适合处理这种不定长的文件么?
另外想把每行的数据存储起来,C里面用什么方式处理这种不定长度的数据呢?
(就是比如有1000行,每行的第一列存到一个容器,第二列存到另一个容器,比如数组里,但这个1000实际不知道有多少)
定义数组时都要初始化大小吧,那么是不是不应该用数组呢?还有什么别的存储容器可以不初始化大小呢?还请经验丰富的前辈指点一下。
y+=atof(stt[7]); 时,stt[7]的值突然被改变了,第二次循环时,甚至只执行到hx+=atof(stt[6]); stt[6]也被改变了.
我认为问题是由于strtok是不安全所导致的,它生成的字符串数组可能被其他线程修改.
我建议你用sscanf来读取字符串中的数字,比如:
#include "string.h"
#include "math.h"
void main()
{
FILE *fp; /*定义一个文件指针*/
double sx,yw,wl,hx,yy;
int i;
char str[81];
double score[5];
sx=yw=wl=hx=yy=0;
fp=fopen("分数表.csv", "rb"); /*打开文件只读*/
for(i=0;!feof(fp);i++)
{
fscanf(fp,"%s\n",str);
sscanf(str+17,"%lf,%lf,%lf,%lf,%lf",score,score+1,score+2,score+3,score+4);
sx+=score[0];
yw+=score[1];
wl+=score[2];
hx+=score[3];
yy+=score[4];
}
printf("%f,%f,%f,%f,%f\n",sx,yw,wl,hx,yy);
fclose(fp);
}
另外,站长团上有产品团购,便宜有保证
我认为问题是由于strtok是不安全所导致的,它生成的字符串数组可能被其他线程修改.
我建议你用sscanf来读取字符串中的数字,比如:
#include "string.h"
#include "math.h"
void main()
{
FILE *fp; /*定义一个文件指针*/
double sx,yw,wl,hx,yy;
int i;
char str[81];
double score[5];
sx=yw=wl=hx=yy=0;
fp=fopen("分数表.csv", "rb"); /*打开文件只读*/
for(i=0;!feof(fp);i++)
{
fscanf(fp,"%s\n",str);
sscanf(str+17,"%lf,%lf,%lf,%lf,%lf",score,score+1,score+2,score+3,score+4);
sx+=score[0];
yw+=score[1];
wl+=score[2];
hx+=score[3];
yy+=score[4];
}
printf("%f,%f,%f,%f,%f\n",sx,yw,wl,hx,yy);
fclose(fp);
}
另外,站长团上有产品团购,便宜有保证
温馨提示:答案为网友推荐,仅供参考
第1个回答 2011-04-19
你用C还是C++,MFC有文本库的,若用C,处理汉字较困难
可以一次读完文件,再处理
不定长度的数据用数组,动态内存分配都可以,反正现在内存大小应该不是问题本回答被网友采纳
可以一次读完文件,再处理
不定长度的数据用数组,动态内存分配都可以,反正现在内存大小应该不是问题本回答被网友采纳