gpt4 book ai didi

c - 将 CSV 文件中的值读入变量

转载 作者:太空狗 更新时间:2023-10-29 16:59:08 25 4
gpt4 key购买 nike

我正在尝试编写一段简单的代码,以从最多包含 100 个条目的 CSV 文件中读取值到结构数组中。

CSV 文件的一行示例:

1,Mr,James,Quigley,Director,200000,0

我使用下面的代码读入值,但是当我打印出这些值时它们是不正确的

for(i = 0; i < 3; i++) /*just assuming number of entries here to demonstrate problem*/
{
fscanf(f, "%d,%s,%s,%s,%s,%d,%d", &inArray[i].ID, inArray[i].salutation, inArray[i].firstName, inArray[i].surName, inArray[i].position, &inArray[i].sal, &inArray[i].deleted);
}

然后当我打印出名字时,值都分配给了名字:

for(j = 0; j < 3; j++) /* test by printing values*/
{
printf("Employee name is %s\n", inArray[j].firstName);
}

以这种方式给出 ames,Quigley,Director,200000,0 等等。我确信这是我格式化 fscanf 行的方式,但我无法让它工作。

这是我正在阅读的结构:

typedef struct Employee
{
int ID;
char salutation[4];
char firstName[21];
char surName[31];
char position[16];
int sal;
int deleted;
} Employee;

最佳答案

这是因为字符串 %s 可以包含逗号,所以它会被扫描到第一个字符串中。 scanf() 格式说明符中没有“先行”,格式说明字符串中 %s 后跟一个逗号这一事实没有任何意义。

使用字符组(在 the manual 中搜索 [)。

const int got = fscanf(f, "%d,%[^,],%[^,],%[^,],%[^,],%d,%d", &inArray[i].ID,
inArray[i].salutation, inArray[i].firstName,
inArray[i].surName, inArray[i].position, &inArray[i].sal,
&inArray[i].deleted);

并学习检查返回值,因为 I/O 调用可能会失败!除非 got 为 7,否则不要依赖数据是否有效。

为了让您的程序读取整个文件(多条记录,即行),我建议使用 fgets() 将整行加载到一个(大)固定大小的缓冲区中,然后使用 sscanf() 在该缓冲区上解析列值。这要容易得多,并且可以确保您确实扫描了单独的行,而在循环中调用 fscanf() 则不会,因为对于 fscanf() 来说,换行只是空格。

关于c - 将 CSV 文件中的值读入变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18737117/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com