【发布时间】:2020-02-18 16:06:07
【问题描述】:
所以我有一个文件,其中包含以下形式的数据:
...
5,25,15,16,1,3,Dwyfor_Meirionnydd
5,34,33,26,12,22,Gower
5,7,28,35,4,23,Islwyn
2,20,12,Llanelli
5,4,5,17,7,21,Merthyr_Tydfil_and_Rhymney
5,5,4,35,28,27,Monmouth
4,5,14,19,15,Montgomeryshire
7,0,32,17,5,12,20,33,Neath
2,38,24,Newport_East
...
我需要读取每一行并将其放入结构中,以便存储第一个无符号整数,接下来的 n 个无符号整数存储在数组中,然后存储最后的字符串。例如,第二行是:
number-of-elements: 5
array: {34,33,26,12,22}
name: "Gower"
number 告诉我们array 中有多少项目。我有这个数据的结构。我将如何为此创建格式?
【问题讨论】:
-
类似
struct{int length, int *data, char *name};和malloc。 -
这被称为 CSV(逗号分隔变量)解析,并且有许多 CSV 解析策略,但如果我从头开始这样做,我最喜欢的是将文件分成几行,然后中断这条线变成一个字符串数组,然后变成数字等。
-
@Owl 大多数(全部?)CSV 解析器都不擅长处理这种特定格式,因为它们需要表格数据。 OP 的数据不是表格(所有行的列数不相等,数据实际上是嵌套的)。
-
,是分隔符 - 读取每个石灰,直到找到\n并在读取新行时 - 使用临时char数组从文件中读取和存储字符,直到遇到分隔符 - 发现使用atoi和memset临时数组。阅读整篇文章直到EOF- 我的评论中缺少很多你需要弄清楚的东西 -
我确实有一个现有的结构,第一个整数告诉我们数组中有多少项。 (为清楚起见,已编辑问题)