【发布时间】:2015-03-03 22:26:15
【问题描述】:
我有两个文件.csv,我需要读取整个文件,但它必须按字段归档。我的意思是,csv 文件是数据以逗号分隔的文件,所以我不能使用 fgets。
我需要读取所有数据,但我不知道如何跳到下一行。
这是我到目前为止所做的:
int main()
{
FILE *arq_file;
arq_file = fopen("file.csv", "r");
if(arq_file == NULL){
printf("Not possible to read the file.");
exit(0);
}
while( !feof(arq_file) ){
fscanf(arq_file, "%i %lf", &myStruct[i+1].Field1, &myStruct[i+1].Field2);
}
fclose(arq_file);
return 0;
}
它将进入无限循环,因为它永远不会获得下一行。
我怎样才能到达我刚刚读到的那一行下面的那一行?
更新:文件 01 示例
1,Alan,123,
2,Alan Harper,321
3,Jose Rendeks,32132
4,Maria da graça,822282
5,Charlie Harper,9999999999
文件 02 示例
1,320,123
2,444,321
3,250,123,321
3,3,250,373,451
2,126,621
1,120,320
2,453,1230
3,12345,0432,1830
【问题讨论】:
-
while (!feof(file))is always wrong。您可以发布示例输入/输出吗?顺便说一句,您应该复制并粘贴代码,因为在发布的代码中没有声明i,因此它不构成MCVE。 -
每行有多少个数据元素?元素是用逗号分隔(正如 CSV 名称所暗示的那样)还是其他分隔符?您是否必须处理本身可能包含逗号的双引号字段?您能否显示 5 行数据?
-
顺便说一句,您至少需要
"%i , %lf"作为格式字符串;如果双精度值后面还跟一个逗号,则在%lf之后需要另一个空格和逗号。无论如何,数字输入都会跳过空格,其中包括换行符。 (逗号后面的空格是可选的;前面的空格并不是真正的可选,但如果您确信数字之后和逗号之前永远不会有空格,它就成为可选的。)您可能会更好地获得 CSV-阅读图书馆。 The Practice of Programming 有工作代码。 -
@JonathanLeffler 我刚刚更新了文件示例。始终仅以逗号分隔。没有双引号字段。
-
@PlayHardGoPro 这看起来像是用
fgets()+ 解析行来完成的任务。