函数读取csv文件,用空字符替换分隔符并计算列和换行符的数量,但返回错误的“\n”数量,我不知道为什么?请帮忙!
在代码末尾注释:应该是 24643 - 实际是 24687
示例数据:我在必要时手动添加了“,”分隔符以显示列更改。
产品,23659,LAUX431GDS X431,图形诊断扫描工具,P,LAUX431GDS,CANDO INTERNATIONAL,右,OE级访问国内、欧洲和亚洲制造商,用于读取/清除代码、实时数据图形和双记录定向测试和模块编码(将提供用于 4 channel 示波器、点火分析仪、传感器模拟器和万用表的单独模块)
int getCurrentData(FILE *current){
int totalChars = 0, colCount = 0, productCount = 0;
char *buffer = NULL, next = '\0';
size_t i = 0;
fseek(current, 0, SEEK_END);
size_t fileSize = ftell(current);
rewind(current);
buffer = malloc(fileSize);
fread(buffer, fileSize, 1, current);
/*replacing delimiter with null character*/
for (i = 0; i < fileSize; i++){
if (buffer[i] == ',' && buffer[i+1] != ' '){
buffer[i] = '\0';
}
}
/*finds column and product count*/
for (i = 0; i < fileSize; i++){
if (buffer[i] == '\0' && productCount == 0 || buffer[i] == '\n' && productCount == 0){
colCount++;
}
if (buffer[i] == '\n' && i < fileSize){
productCount++; /*should be 24643 - actual 24687*/
}
}
return productCount;
}
最佳答案
问题数量
主要问题是替换分隔符循环可能会将
\n
替换为\0
。次要:
long fileSize
应为size_t fileSize
。if (next != EOF){
应删除。次要:
buffer = malloc(fileSize + 1);
应为buffer = malloc(fileSize);
替换循环困惑
size_t fileSize = ftell(current); ... buffer = malloc(fileSize); // later add error checking fread(buffer, fileSize, 1, current); // later add error checking /*replacing delimiter with null character*/ for (size_t i = 0; i < fileSize; i++){ if (buffer[i] == ',') { // Not sure why OP has (buffer[i+1] != ' ')? Maybe \n was originally meant if ((i+1) >= filesize) || ((buffer[i+1] != ' ') && (buffer[i+1] != '\n'))) { buffer[i] = '\0'; // Or rather than the above if(), maybe something simple: buffer[i] = '\0'; } } }
代码未测试 - 抱歉时间不够。
关于c - 从csv文件中读取错误的数字 '\n',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20979784/