我正在开发一个相对简单的分析程序,涉及在C中将CSV数据提取到数组中,我想知道最好的方法是什么 - 我知道我希望我的程序做什么,但我不确定如何从CSV文件中有效地加载数据,特别是因为我已经看到了各种使用的方法。
基本上,我每周都会收到包含技术数据的CSV文件报告,并希望从每个报告(在所有报告中)中提取所选数据点到C中的数组,以制表/绘制/操作并比较一段时间内的趋势。每个报告中的数据(不包含页眉/页脚)与下面的数据类似(数字的逗号之间有规则的间距,所以随机空格和字符的随机长度):
"E7Q681" ,141118 ,2014-11-18,001626 ,6548 ,00 ,001 , 66646, 14566,"Truck" "IOUOP" ,1411548 ,2014-11-18,001626 ,6548 ,00 ,001 , 66646, 13546,"Crane" "EB5581" ,144118 ,2014-11-18,001626 ,321 ,04 ,001 , 66346, 13546,"Truck" "MN55581" ,141218 ,2014-11-18,001626 ,6548 ,04 ,001 , 66246, 135346,"Truck" "E43" ,141518 ,2014-11-18,001626 ,6548 ,03 ,001 , 64646, 13546,"Bus"
A部分:
我希望为初学者看一个'车辆'(比如“EB5581”),然后分析一些技术参数(比如说第5和第9个逗号值)(即所有报告)。这提出了第一个问题:
在输入行的第一个值作为用户(例如“EB5581”)之后,我如何首先只读取相应的行(例如第3行),然后如何仅提取某些位置的数字(例如。第5和第9个值)成阵列?似乎可以简单地使用scanf,因为数据是相当规律的,但是如果出现奇怪的事情,那似乎是危险的。我也不确定如何使用fread等来隔离特定的行和数据点。
B部分:
第二个问题涉及如何实现对多个文件的阅读以实际调查趋势变化。我想我会在代码标题中定义报告的数量,然后尝试使用A部分为每个报告标题循环所有可用的报告标题,即我可能拥有多年的数据:
REPORT1.TXT, REPORT2.TXT ... Report52.txt
我可以稍后更新程序,根据日期计算报告数量,避免每周重新定义标题。是否可以以简单的方式更改文件名以适应这种方法(即,从i = 1到i = 52执行类似Reporti.txt的操作)。报告之间唯一的标识是文件名,以及每行第3个csv位置中包含的日期。
非常感谢任何帮助,这种方法看起来合情合理吗?我还考虑过从每个报告中提取行,然后将它们放入一个新的csv文件(即一个文件,只说每个报告中的第3行,按时间顺序列出),但似乎随着时间的推移更难更新只是拖着躺椅。此外,这可能需要大量的计算时间吗?如果是这样,那么我会更好地创建新的CSV文件(每周更新),只需要我想要的数据吗?我主要关注的一个问题是创建可以轻松更新的内容(只需将新报告放在文件夹中)。提前干杯。