如何从文件中读取特定格式的数据? [英] How to read specifically formatted data from a file?

查看:11
本文介绍了如何从文件中读取特定格式的数据?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我应该从类似以下格式的文件中读取输入和参数:

Add  id:324  name:"john" name2:"doe" num1:2009 num2:5 num2:20

问题是我不允许使用fgets。我尝试使用fscanf,但不知道如何忽略":"并分隔字符串"name:"john""。

推荐答案

如果您确定输入文件将采用格式良好、非常具体的格式,则fscanf()始终是一个选项,它将为您完成大量工作。下面我使用sscanf()只是为了说明,而不必创建文件。您可以将调用更改为对您的文件使用fscanf()

#define MAXSIZE 32
const char *line = "Add  id:324  name:"john" name2:"doe" num1:2009 num2:5 num3:20";
char op[MAXSIZE], name[MAXSIZE], name2[MAXSIZE];
int id, num1, num2, num3;
int count =
    sscanf(line,
        "%s "
        "id:%d "
        "name:"%[^"]" "  /* use "name:%s" if you want the quotes */
        "name2:"%[^"]" "
        "num1:%d "
        "num2:%d "
        "num3:%d ", /* typo? */
        op, &id, name, name2, &num1, &num2, &num3);
if (count == 7)
    printf("%s %d %s %s %d %d %d
", op, id, name, name2, num1, num2, num3);
else
    printf("error scanning line
");

输出:

添加324 John doe 2009 5 20

否则,我将手动解析输入,一次读取一个字符,或者如果出于任何原因不允许使用fgets(),则将其抛入缓冲区。有缓冲总是比没有缓冲要容易得多。然后,您可以使用其他函数,如strtok()和不执行解析的其他函数。

这篇关于如何从文件中读取特定格式的数据?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆