【发布时间】:2013-12-24 05:44:35
【问题描述】:
我这里有这段代码:
#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
int main()
{
FILE *inFile, *outFile;
int i;
char buffer[1];
bool lastIsComma = false;
inFile = fopen("csv.txt","r");
outFile = fopen("output.txt","w");
while(!feof(inFile))
{
fscanf(inFile,"%c",&buffer);
i = atoi(buffer);
if((i!=0) || (*buffer == '0'))
{
fprintf(outFile,"%d",i);
lastIsComma = false;
}
else
{
if((lastIsComma) && (feof(inFile)))
{
fputc('0',outFile);
}
if((lastIsComma) && (!feof(inFile)))
{
fputc('0',outFile);
fputc(',',outFile);
}
if((!lastIsComma) && (feof(inFile)))
{
fputc(',',outFile);
fputc('0',outFile);
}
if((!lastIsComma) && (!feof(inFile)))
{
fputc(',',outFile);
}
lastIsComma = true;
}
}
fclose(inFile);
fclose(outFile);
return 0;
}
此代码的作用是在 csv 中的连续逗号之间添加零,例如,1,2,,,,3, -> 1,2,0,0,0,3,0
我的代码适用于以逗号结尾的 csv,如上面的示例,但不适用于以值结尾的 csv,如 1,2,3,4,5(我得到的是 1,2,3,4,55,而是末尾有额外的“5”)。
任何人都可以提出代码中的问题吗?谢谢。
【问题讨论】:
-
首先,读取单个
char使用char buffer;而不是数组。并尝试使用buffer = fgetc(inFile);而不是fscanf,我只是猜测fscanf可能有问题。 -
1,2,,,,3,将输出1,2,0,0,0,3,0,0