【发布时间】:2014-01-07 19:10:26
【问题描述】:
函数读取 csv 文件,用空字符替换分隔符并计算列数和换行符,但返回错误的 '\n' 数,我不知道为什么?请帮忙!
代码末尾附近的注释:应该是 24643 - 实际是 24687
示例数据:我在必要时手动添加了“,”分隔符以显示列更改。
Product,23659,LAUX431GDS X431,图形诊断扫描工具,P,LAUX431GDS,CANDO INTERNATIONAL,权利,OE 级访问国内、欧洲和亚洲制造商,用于读取/清除代码、实时数据绘图和记录定向测试和模块编码(将提供用于 4 通道示波器、点火分析仪、传感器模拟器和万用表的单独模块)
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;
}
【问题讨论】:
-
为什么你认为数字应该不同?
-
一个问题是您假设您从文件中读取的缓冲区将包含值
EOF。 -
可能,
fileSize不正确。 -
为了澄清您的问题:您是说当文件中只有 24643 行时此代码返回 24687?它比实际有 44 更多 行?
-
您的“应该”是 24643,“实际”是 24687。24687 来自您的代码。您是如何确定 24643 的?如果这是 Excel 中的行数,请注意一个单元格可以有多行。