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);
但这似乎效率低下/每个主板都不同,并且没有一定数量的属性。有线索吗?
答案 0 :(得分:1)
回答牢记语言C
不,这不会像你已经看到的那样成功。方法是使用fgets()
逐行读取文件,然后解析它。那将是一个选择。通过您的扫描方式,第一个scanf
将成功,然后后者将不会成功。然后,那些,,,,
将留在流中,使您对scanf
的连续调用无法按预期工作。
我正在谈论的解决方案 - 使用fgets
,然后尝试找到单词"Go"
的出现,一旦找到它,然后在此行上,在结尾处开始修剪空白区域之后如果您知道该格式始终为Go,400,MU,,,,,,,
,那么您将使用strtok
来解析并获取输入。如果您需要从字符串转换为int
,则可以使用strtol
(float/double
使用strtod
或strtof
)函数
此外,如果您希望自己不受所有这些解析和处理的影响,请寻找一些解析库(csv
解析器 - 不要问哪一个),有很多解析库。