通过使用 strsep 拆分来解析 CSV 文件
Parsing CSV file by splitting with strsep
我在尝试使用 strsep() 解析逗号分隔值文件时收到一些不需要的输出。它似乎适用于文件的一半,其中一个数字只有一个值(即 0-9),但是一旦添加了多个值,例如 512,
它将打印 512 12 2 512 12 2 等等。我不确定这是否是由于我正在循环播放的特定样式造成的?不太确定。
int main() {
char line[1024];
FILE *fp;
int data[10][10];
int i = 0;
int j = 0;
fp = fopen("file.csv", "r");
while(fgets(line, 1024, fp)) {
char* tmp = strdup(line);
char* token;
char* idx;
while((token = strsep(&tmp, ","))) {
for (idx=token; *idx; idx++) {
data[i][j] = atoi(idx);
j++;
}
}
i++;
j=0;
free(tmp);
}
for(i = 0; i < 10; i++) {
for(j = 0; j < 10; j++) {
printf("%d ", data[i][j]);
}
printf("\n");
}
fclose(fp);
}
这是因为您通过使用 strsep()
返回的标记中的每个字符作为循环的开始来创建元素
for (idx=token; *idx; idx++) {
data[i][j] = atoi(idx);
j++;
}
停止这样做,只从一个标记创建一个元素来更正:
while((token = strsep(&tmp, ","))) {
data[i][j] = atoi(token);
j++;
}
此外 free(tmp);
将不执行任何操作,因为 tmp
将被 strsep()
设置为 NULL
。要释放通过 strdup()
分配的缓冲区,请将指针保存在另一个变量中并将其用于释放。
我在尝试使用 strsep() 解析逗号分隔值文件时收到一些不需要的输出。它似乎适用于文件的一半,其中一个数字只有一个值(即 0-9),但是一旦添加了多个值,例如 512,
它将打印 512 12 2 512 12 2 等等。我不确定这是否是由于我正在循环播放的特定样式造成的?不太确定。
int main() {
char line[1024];
FILE *fp;
int data[10][10];
int i = 0;
int j = 0;
fp = fopen("file.csv", "r");
while(fgets(line, 1024, fp)) {
char* tmp = strdup(line);
char* token;
char* idx;
while((token = strsep(&tmp, ","))) {
for (idx=token; *idx; idx++) {
data[i][j] = atoi(idx);
j++;
}
}
i++;
j=0;
free(tmp);
}
for(i = 0; i < 10; i++) {
for(j = 0; j < 10; j++) {
printf("%d ", data[i][j]);
}
printf("\n");
}
fclose(fp);
}
这是因为您通过使用 strsep()
返回的标记中的每个字符作为循环的开始来创建元素
for (idx=token; *idx; idx++) {
data[i][j] = atoi(idx);
j++;
}
停止这样做,只从一个标记创建一个元素来更正:
while((token = strsep(&tmp, ","))) {
data[i][j] = atoi(token);
j++;
}
此外 free(tmp);
将不执行任何操作,因为 tmp
将被 strsep()
设置为 NULL
。要释放通过 strdup()
分配的缓冲区,请将指针保存在另一个变量中并将其用于释放。