c - 从文件行扫描直到 C 中的整数

标签 c io string-parsing

我在扫描文件中的字符串直到出现整数值时遇到问题。 如果我尝试 fgets(str,30,file);,它会扫描单行文件中的所有内容,包括整数。

文件示例:

Audi 2014
Wall Street 1995
The number of words used in one line may vary 9999

整数总是在最后,但是值之前的单词数并不总是相同的,所以像 fscanf(file,"%s %s %d", str1, str2, &integer); 这样的代码确实不能正常工作。 我的意图是扫描所有内容,直到字符串中的整数值,而不是单独扫描整数。 有任何想法吗 ?

谢谢你们。

最佳答案

这是基本的 C,没有花哨的东西。如果您的数据具有您描述的格式,它将起作用,即文本文件中的空格分隔单词,每行的编号正好在换行符之前,并且每行至少以一个不是您的编号的单词开头。缓冲区的大小可以根据需要更改,它只会影响性能。 此外,您的文件至少需要一行符合您描述的格式。

FILE *f;
char bf[2048];
char *p, *p1;
int line, i, num;

f = fopen("mydatafile.txt", "r");
if (f)
{
    line = 0;
    while (!feof(f))
    {
        fgets(bf, sizeof(bf), f);
        p1 = bf;
        p = strchr(bf, '\n');
        while(p)
        {
            *p = 0;
            i = 0;
            while (isdigit(p[--i])) ;
            num = atoi(p+i+1);
            p[i] = 0;
            printf("line %d: %s  number = %d\n",++line, p1, num);
            p1 = p+1;
            p = strchr(p1, '\n');
        }
    }
    fclose(f);
}

对于您的示例数据,输出为:

line 1: Audi  number = 2014
line 2: Wall Street  number = 1995
line 3: The number of words used in one line may vary  number = 9999

关于c - 从文件行扫描直到 C 中的整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22745574/

相关文章:

ios - 当我调用调用 NSLog 的方法时,控制台不显示输出

c - sscanf - 从空字符串中读取

java - 查找严格并丢失正则表达式模式

c - 使用C读取RaspberryPi上的声卡数据

c - 将我的应用程序与 Powerpoint 集成

c - FUSE 文件系统在打开文件时崩溃(仅在 Release模式下)

c - fscanf() 仅读取不带标点符号的字符

c - 电位计作为 MSP430g2452 启动板的输入

haskell - 解析为自由单子(monad)

java - 在Java中获取字符串整数结尾的最佳方法?