【问题标题】:How to skip white lines while reading text file?阅读文本文件时如何跳过白线?
【发布时间】:2011-12-13 03:34:42
【问题描述】:

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

【问题讨论】:

    标签: c text-parsing


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      一般概念很好......您逐行阅读并检查它是否具有非空白字符。检查它的一种相当最佳的方法是使用 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;
      }
      

      【讨论】:

        【解决方案3】:

        如果逐行读取,请使用“\n”的简单检查(即使您的真正操作系统换行符是 \r\n,编译器也会小心)。 如果使用 fread 读取整个文件,使用 strtok 或 strtok_r 使用 sep='\n' 分割行,空行会自动被截掉。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-11-05
          相关资源
          最近更新 更多