读取文本文件并忽略C中的注释行

时间:2018-04-17 18:59:55

标签: c parsing

我目前正致力于在C中制作一台小型计算机进行编程工作,而我却陷入了一个问题。

我坚持如何正确地忽略我正在阅读的文本文件中的注释。(下面的文件输入示例)。

Input File
5 5     //IN 5
6 7     //OUT 7
3 0     //STORE 0
5 5     //IN 5
6 7     //OUT 7
3 1     //STORE 1
1 0     //LOAD 0
4 1     //SUB 1
3 0     //STORE 0
6 7     //OUT 7
1 1     //LOAD 1
6 7     //OUT 7
7 0     //END

每个新行的第一个输入是一个操作,第二个输入是一个地址。我打算为每个op都有一个switch语句,然后调用相应的函数。这是我目前在文件中阅读的布局:

//file handling
int c;
FILE * file;
file = fopen(name, "r");
if (file){
    printf("Run.\n");
    while ((c = getc(file)) != EOF){
        op = c;
        switch (op){
            case 5:
                print("Inside case 5\n");
        }
    }
    fclose(file);
}

如何忽略每一行的//并跳到文件的下一行?

3 个答案:

答案 0 :(得分:2)

调用fgets获得一整行:

fgets(buffer, 100, file);

然后从行中提取两个数字:

sscanf(buffer, "%d%d", &instruction, &address);

答案 1 :(得分:1)

  

如何正确忽略我在阅读的文本文件中的评论   如何忽略每行上的//并跳到文件中的下一行?

使用fgets()

阅读
char buf[80];
if (fgets(buf, sizeof buf, file)) {

使用// @Steve Summit查找strstr()并在此时删掉字符串。

  char *slash_slash = strstr(buf, "//");
  if (slash_slash) {
    *slash_slash = '\0';
  }

根据需要继续处理该行。

  ...
}

答案 2 :(得分:0)

通过使用fgetsstrtok,您可以逐行阅读并根据//分隔符拆分字符串。这是一个例子(它没有经过全面检查,但它是主要想法):

FILE *f = fopen("file.txt", "r");
    if (f== NULL)
    {
        printf("opening file failed\n");
        return 1;
    }
    char buf[256] = { 0 };
    while (fgets(buf, 256, f))
    {
        char *s = strtok(buf, "//");
        if (s == NULL)
        {
            printf("s == NULL\n");
        }
        else
        {
            printf("%s\n", s);
        }
        memset(buf, 0, 256);
    }
    fclose(f);

编辑:我刚才意识到这并不是你想要的。但是,您仍然可以使用它来首先忽略注释,然后将给定的字符串分解为操作和地址,或者其他任何内容...