2

Cプログラムで特定のキーワードマッチングのためにファイルを解析しています。これが私のサンプルコードです...

#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 = %s", value))
            printf("Value = %s\n", value);
    return 0;
}

Somefile.txt

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

出力:

Value = 3
Value = 4
Value = 5
Value = Hi

問題 : x に "Hi Hello" のような値が含まれている場合、"Hi" のみを解析するだけです。スペースを失うことなく x の値全体を解析したいと考えています。

解決策を提案してください。

ありがとう。

4

2 に答える 2

2

コードのこの行:

if (1 == sscanf(buffer, " x = %s", value))

%s一言で読むことを意味します。

行の残りの部分を読みたい場合は、次の%[^\n]sように使用します。

if (1 == sscanf(buffer, " x = %[^\n]s", value))
于 2012-03-21T05:07:07.300 に答える
0

最初に行うことは、sscanfに戻ることです。マニュアルページを読むと、scanfはスペースを「ここに空白があります。重要ではありません」という仕様として扱います。次に、他の文字はリテラルの仕様です。その結果、そのフォーマット仕様は、「任意の量のwhileスペース、x、さらに空白、'='、さらに空白、文字列、そして文字列を返す」のようになります。

ここで実際に実行しようとしているのは、軽量の構文解析です。おそらく、各行を読み取り、単純な有限状態マシンでスキャンする方がよいでしょう。

while not end of file
   while not end of line
      get next character
      if char == ";" -- comment
         break
      if char is a letter
         parse an assignment

等々。

于 2012-03-21T05:07:24.873 に答える