c - 如何读取 CSV 文件中的特定信息

标签 c csv

Number of Spaces,10,,,,,,,,
,,,,,,,,,
,,,,,,,,,
Type,Set Id,Intraset Id,Name,Property Cost,House Cost,Hotel Cost,Rent,Rent with House,Rent With Hotel
Go,400,MU,,,,,,,
Property,0,0,Kemper A,500,50,50,5,50,2000
Property,0,1,Kemper B,1000,50,50,10,75,2500
Property,1,0,Bainer A,2000,200,200,20,100,3000
Property,1,1,Bainer B,2500,200,200,25,150,3000
Property,1,2,Bainer C,3000,200,200,30,200,3500
Property,2,0,SocialSci A,4000,400,400,40,300,4000
Property,2,1,SocialSci B,4500,400,400,45,400,4000
Property,2,2,SocialSci C,5000,400,400,50,500,4000
Property,2,3,SocialSci D,5500,400,400,55,600,4500

如何查找 CSV 文件的特定部分?我只需要 0,0,Kemper A,500,50,50,5,50,2000 等每个属性的所有值。 我一直在做的是

fscanf(file,"Number of Spaces,%d",&b->numSpaces);
fscanf(file,"Go,%d",&b->goValue);

但这似乎效率低下/每个板都是不同的,并且没有固定数量的属性。有什么线索吗?

最佳答案

回答时请记住语言C

不,这不会像您已经看到的那样工作。方法是使用fgets()逐行读取文件,然后解析它。这将是一个选择。按照您的扫描方式,第一个 scanf 会成功,而后一个则不会。然后这些 ,,,, 将保留在流中,从而使您对 scanf 的连续调用无法按您预期的那样工作。

我正在谈论的解决方案 - 使用fgets,然后尝试查找单词“Go”的出现,一旦找到它,然后在修剪后在这一行上行尾和行首的空白,如果您知道格式始终为 Go,400,MU,,,,,,, 那么您将使用 strtok解析并获取输入。如果您需要从字符串转换为int,您可以使用strtol(对于float/double使用strtodstrtof) 函数

如果您希望自己摆脱所有这些解析和处理,请寻找一些解析库(csv 解析器 - 不要问是哪个),有很多。

关于c - 如何读取 CSV 文件中的特定信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48363933/

相关文章:

Python - 从元组 CSV 文件中删除大括号和逗号

python - 为 pandas.read_csv 指定正确的 dtypes 以获取日期时间和 bool 值

python - pandas.read_csv 来自字符串或包数据

Python将csv转换为xlsx

c - c 中 fork() 的输出

c - 数组到链表 C

C 中 printf 函数的代码

c - 无法在 mac OS X 上使用编译的 netlib BLAS

c - 使用静态缓冲区的地址算术

sql - 将序列值重置为 1