我必须解析像这样的.txt文件
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'等。
答案 0 :(得分:2)
一般来说,尝试使用fscanf
解析输入并不是一个好主意,因为如果输入与预期不匹配,则难以优雅地恢复。通常最好将输入读入内部缓冲区(使用fread
或fgets
),并在那里解析(使用sscanf
,strtok
,strtol
等等。)。有关哪些函数最佳的详细信息取决于输入格式的定义(您没有给我们提供;示例输入是 no 替换正式规范)。
答案 1 :(得分:0)
以下说明如何使用strtok
:
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
:
char tag[20];
int chars = -1;
if (sscanf(item, " %19[^:]: %n", tag, &chars) == 1 && chars >= 0)
{
printf("%s is %s\n", tag, item + chars);
}
此处,格式字符串包含以下内容:
如果出现意外输入,则不会更新字符数,因此在解析每个项目之前必须将其设置为-1
。