2012-03-02 63 views
1

我需要用C語言創建一個搜索程序,它可以解析文本文件並找到關鍵字x =「value」。那麼我想創建一個值列表到數組中。目前我正在使用fscanf方法,這裏是我的代碼片段。解析與特定關鍵字匹配的文本文件



    fscanf(fp, "%s", buf); 
    if !strcmp(buf, "x") 
    { 
     fscanf(fp, "%s", buf); 
     if (! strcmp(buf, "=")) 
     fscanf(fp, "%s", buf); 
     else 
     printf("\n Not a valid format"); 
    } 

我不想使用fscanf,有沒有其他方法可以滿足我的要求?
謝謝。

回答

1

還有其它的方法(例如,你可以使用Flex),但我覺得稍微好一點的使用sscanf將最有意義:

char buffer[256]; 
char value[128]; 

fgets(buffer, sizeof(buffer), fp); 

if (1==sscanf(buffer, "x=%127s", value)) 
    // we read a value -- now use it however needed. 

編輯:這裏的基本想法是很簡單。我們從閱讀整個fgets開始。然後我們使用sscanf來嘗試在該行中匹配x=<whatever>。如果我們找到它,我們就有我們關心的價值。如果我們沒有找到它,sscanf將返回0,因爲它返回它轉換的項目數 - 如果它不匹配我們指定的x=,它將不會轉換任何東西,所以sscanf將返回0,並且我們知道這條線不匹配。

編輯2:這裏有一個小的演示程序,從文件中讀取數據,並打印出了下面的表格x=<whatever>線的值,其前後x後容許空間和=

#include <stdio.h> 

int main() { 

    FILE *infile = fopen("Somefile.txt", "r"); 

    char buffer[256]; 
    char value[128]; 

    while (fgets(buffer, sizeof(buffer), infile)) 
     if (1 == sscanf(buffer, " x = %127s", value)) 
      printf("Value = %s\n", value); 
    return 0; 
} 

我這個測試它作爲輸入:

some junk 
#a comment 
a = 1 ; a couple other variables. 
b = 2 
x = 3 
x = 4 
x=5 

我得到的結果是:

Value = 3 
Value = 4 
Value = 5 
+0

感謝您的快速回復,請您詳細描述您的答案? – Nimit 2012-03-02 06:13:28

+0

很好。但是,將文件數據存儲到緩衝區是否好?你能給我提供以上的例子與文件操作?非常感謝。 – Nimit 2012-03-02 06:22:22

+1

我建議在格式字符串的'='周圍留出空格,如下所示:'「x =%127s」'。這將允許用戶在文件中的'='周圍留出空間。 – 2012-03-02 06:22:54

相關問題