簡體   English   中英

讀取文本文件並忽略C中的注釋行

[英]Reading a text file and ignoring commented lines in C

我目前正在用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

每條新行的第一個輸入是一個操作,第二個輸入是一個地址。 我計划為每個操作准備一個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);
}

如何忽略每行// //並跳至文件的下一行?

致電fgets以獲取完整行:

fgets(buffer, 100, file);

然后從該行中提取兩個數字:

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

如何正確忽略正在閱讀的文本文件中的注釋
如何忽略每行// //並跳至文件的下一行?

使用fgets()閱讀該

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

使用strstr() @Steve Summit查找// ,然后在該位置斷開字符串。

  char *slash_slash = strstr(buf, "//");
  if (slash_slash) {
    *slash_slash = '\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);

編輯:我只是意識到這不是您想要的。 但是,您仍然可以使用它來首先忽略注釋,然后將給定的字符串分成操作和地址,或其他任何東西。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM