从txt文件中读取文件并插入到数组中,逗号作为分隔符。

4

我有一个 .txt 文件,其中的记录看起来像这样:

1234567, John, Doe

我在我的 C 代码中有数组,我希望读取这些值并将它们插入到:

int id[36] = {0};
char first_name[36];
char last_name[36];

所以,例如,1234567在id的索引0处,John在first_name的索引0处,而doe在last_name的索引0处。我希望能够用36条类似的线路来实现这一点。

我已经研究了文件IO,但没有找到与此相关的内容。最好的方法是什么?谢谢任何回复。


你学过 struct 类型吗?我猜你还没有,如果是这样,那么你不使用它们可以被原谅。如果你已经学过了,那么这就是一个你应该使用它们的典型例子。你会有一个结构类型的数组,每个结构包含 ID、名和姓。 - Jonathan Leffler
2个回答

6

使用fscanf创建一个循环,读取您的文件内容。检查返回值是否为3,表示已读取所有三个项目:

// id is OK as os
int id[36] = {0};
// make first_name and last_name arrays of arrays
char first_name[36][36];
char last_name[36][36];
int i = 0;
while (fscanf(fd, "%d, %35[^,], %35s", &id[i], first_name[i], last_name[i]) == 3) {
    i++;
    if (i == 36) {
        break;
    }
}
< p > fscanf的格式字符串指定第一个参数为int,后跟逗号和空格,然后是35个非逗号字符的序列,再次是逗号,并且名字的最后35个字符。


当我写%35 [^,]时,它会给我一个投诉(在sublime文本中它会突出显示)。有什么原因吗? - Giancarlo Manuel Guerra Salvá
@GiancarloManuelGuerraSalvá 没有理由为符合标准的编译器突出显示它,因为它是完全有效的 C99。请参见在打开最严格的兼容性检查时编译和运行 - Sergey Kalinichenko
是的!我尝试了一下,发现了这点。还有最后一个注意事项:我意识到它是从最后一条记录(第36条记录)开始读取文件,一直到顶部。此外,它没有移动到新行。我该如何在其中加入 \n 以使其换到新行? - Giancarlo Manuel Guerra Salvá
@GiancarloManuelGuerraSalvá 这应该从上到下读取文件,并处理换行符。我已经更新了上面链接中的演示以读取更多行。如果您想要,可以将其反向打印 - 只需从 i-1 开始,并在打印数据时递减索引即可。 - Sergey Kalinichenko
我刚刚重启了我的电脑,现在它运行正常。感谢你们的所有帮助!虽然发生这种奇怪的事情有点让人困惑。 - Giancarlo Manuel Guerra Salvá

1
您可以使用fscanf一次读取一行文件,并使用strtok解析它,这使您可以指定特定的字段分隔符。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接