首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用C代码解析.txt文件

用C代码解析.txt文件
EN

Stack Overflow用户
提问于 2012-07-01 14:31:00
回答 2查看 2.9K关注 0票数 1

我必须解析像这样的.txt文件

代码语言:javascript
复制
autore: sempronio, caio; titolo: ; editore: ; luogo_pubblicazione: ; anno: 0; prestito: 0-1-1900; collocazione: ; descrizione_fisica: ; nota: ;

在C代码中使用fscanf。我在fscanf调用中尝试了一些格式,但没有一种有效.

编辑:

A= fscanf(fp,"autore:%s");

这是我做的第一次尝试,fscanf()不可能捕捉到'autore‘、'titolo’、'editore‘等图案。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-01 14:36:46

一般来说,尝试用fscanf解析输入不是一个好主意,因为如果输入不符合预期,就很难优雅地恢复。通常最好将输入读入内部缓冲区(使用freadfgets),并在其中解析它(使用sscanfstrtokstrtol等)。关于哪些函数最好的详细信息取决于输入格式的定义(您没有给出这种定义;示例输入不能替代正式的规范)。

票数 2
EN

Stack Overflow用户

发布于 2012-07-01 16:23:35

下面展示了如何使用strtok

代码语言:javascript
复制
char* item;
char* input; // fill it with fgets

for (item = strtok(input, ";"); item != NULL; item = strtok(NULL, ";"))
{
    // item loops through the following:
    // "autore: sempronio, caio"
    // " titolo: "
    // " editore: "
    // ...
}

下面展示了如何使用sscanf

代码语言:javascript
复制
char tag[20];
int chars = -1;

if (sscanf(item, " %19[^:]: %n", tag, &chars) == 1 && chars >= 0)
{
    printf("%s is %s\n", tag, item + chars);
}

在这里,格式字符串由以下内容组成:

  • (空格)-告诉解析器放弃空格
  • 19 -标记中的最大字节数/字符数
  • :-告诉解析器读取,直到它满足冒号字符。
  • -告诉解析器丢弃冒号字符
  • (空白)-如上所示
  • %n -告诉解析器报告它读取的字节数(Check&Chars)

如果有意外输入,则不会更新字符数,因此在解析每个项之前,必须将其设置为-1

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11282784

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档