首页 > 解决方案 > 读取以';'分隔的数据 从文件

问题描述

我正在尝试从格式为;. 数据将永远是这样的:

char[];int;int%;int

char[]可以有任意数量的空格,读取%数据时应忽略 。

我正在使用fscanf()(我只能使用它)从文件中读取数据。
现在我的那部分代码是:

fscanf(file, "%[^;]%d%d%d", f_name, &f_id, &f_score, &f_section_num) != EOF)

有我需要的正则表达式吗?或者,我该如何纠正我的fscanf

标签: cfileparsing

解决方案


fscanf您可以使用以下格式字符串读取文件:

"%[^;];%d;%d%%;%d"
  • %[^;]: 读到第一;
  • ;: 忽略;
  • %d: 读取一个整数
  • ;: 忽略;
  • %d: 读取一秒整数
  • %%: 忽略%
  • ;: 忽略;
  • %d: 读取三分之一整数

不要忘记通过测试来测试成功转换的fscanf次数fscanf(...) == 4

所以代码看起来像:

FILE *f = fopen(...);
char name[64];
int i, integers[3];

while (fscanf(f, "%[^;];%d;%d%%;%d", name, &integers[0], &integers[1], &integers[2]) == 4)
{
    printf("name is %s\n", name);
    for (i = 0; i < 3; ++i)
    {
        printf("i[%d] = %d\n", i, integers[i]);
    }        
}
fclose(f);

推荐阅读