【问题标题】:How to Read Specific Information in CSV File如何读取 CSV 文件中的特定信息
【发布时间】:2018-01-21 05:22:07
【问题描述】:
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 csv


    【解决方案1】:

    回答时记住语言C

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-22
      • 2019-08-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多