阅读文本文件时如何跳过白线?

时间:2011-10-22 12:07:02

标签: c text-parsing

我想逐行阅读文本文件,但我对白线不感兴趣。跳过空白线有什么好方法?我知道我可以阅读一行,检查它是否为空白并且如果是空的则释放它,依此类推,直到我达到一个好的路线,但我想知道是否还有其他方法可以做到这一点。

3 个答案:

答案 0 :(得分:2)

我认为你的方法已经足够好了。从技术上讲,你甚至应该检查它是否只是空格:-)请注意,如果你使用fscanf(在家庭作业中很常用),白线跳过“包含在价格中”:-)你没有为了对抗“这条线比我的缓冲区大,我该怎么办?”

答案 1 :(得分:0)

一般概念很好......你逐行阅读并检查它是否有非空白字符。检查它的最佳方法是使用strspn ...例如:

#include <stdio.h>
#include <string.h>

int is_blank_line(const char *line) {
    const char accept[]=" \t\r\n"; /* white space characters (fgets stores \n) */
    return (strspn(line, accept) == strlen(line));
}

int main(int argc, char *argv[]) {

    char line[256]; /* assuming no line is longer than 256 bytes */
    FILE *fp;

    if ( argc < 2 ) {
        fprintf(stderr, "Need a file name\n");
        return -1;
    }

    fp = fopen(argv[1], "r");

    if ( !fp ) {
        perror(argv[1]);
        return -1;
    }

    while (!feof(fp)) {
        fgets(line, sizeof(line), fp);
        if (is_blank_line(line)) {
            continue;
        }
        printf("%s", line);
    }

    return 0;
}

答案 2 :(得分:0)

如果逐行阅读,请使用'\ n'进行简单检查(即使您的真实操作系统换行符为\ r \ n,编译器也会注意)。 如果使用fread读取整个文件,则使用strtok或strtok_r使用sep ='\ n'分割行,空行将自动切断。