如何从数据之间带分隔符的文件中使用fscanf获取空间

时间:2014-05-16 06:22:31

标签: c file delimiter scanf

我有一个包含以下信息的文本文件。每条记录的大小都是200Bytes,但它通常使用的小于200B,因为你可以看到每条记录后有一些空格使它成为200B。我的问题是我需要以非常少的搜索量来解决这个问题,并阅读我能得到的最多信息。所以我想用下面的内容阅读这个文件:

char auxStr[50];
fscanf(f,"%[^\n]s|",auxStr); // HERE IS THE PROBLEM, IT DOES NOT WORK
p->nome = (char*) malloc(sizeof(char)*strlen(auxStr)+1);
strcpy(p->nome,auxStr);
printf(" %s\n\n", p->nome);

我希望 auxStr 具有空白“St Charles,961”这个值,是否可以使用像fscanf这样的c函数来完成它或者我必须使用循环并读取每个字符,直到我找到分隔符“|”?

Ps:使用循环将解决问题,但我相信它将使用尽可能多的搜索。我想我不能使用fgets因为我不知道要读取的字符串的长度。

文字档案:

85 82|AAAA|BBBB|St Charles,961|Sao Carlos|Sao Paulo|13560-0520|-1|-------------------------
|8585|FFFFFF|RRR| RUA Y, 888|Rio de janeiro|585996-988|-1|---------------------------------
|98 85|ZZZZ|YYYY|AV YYY,889|SP|949845-45354|-23|-----------------------------------------------  

1 个答案:

答案 0 :(得分:0)

这是建议从一行读取所有字段。

char field1[50];
char field2[50];
char field3[50];
char field4[50];
char field5[50];
char field6[50];
char field7[50];
char field8[50];

fscanf(f, "%[^|]s|%[^|]s|%[^|]s|%[^|]s|%[^|]s|%[^|]s|%[^|]s|%[^|]s|",
          field1, field2, field3, field4,
          field5, field6, field7, field8);