2011-04-28 5 views
0

設定ファイルは、私はちょうど引数を分割することになると考えることができ構成ファイルの引数は、位置に関係なくどのように解析されますか?

CFLAGS = "xyz" 
CXXFLAGS = "xyz" 

OR

CXXFLAGS = "xyz" 
CFLAGS = "xyz" 

ベストな実装を持っており、スイッチに左側を養うことができ

for line in file 
    x = line.split("=") 
    switch(x[0]) 
     case CFLAGS 
      do cflags 
     case CXXFLAGS 
      do cxxflags 

しかし、どのように私よりも経験が豊富な人はそれをしますか?私はおそらくこれを行うオープンソースプログラムをいくつか知っているだろうが、ソースのどこを見てもわからない。 私は主にPythonとCでプログラムするので、両方の実装/ pseudocode/whattolookupが優先されますが、他の言語もうまくいきます。

ありがとうございます。

P.S.やむを得ない場合を除いて、あなたの答えにre、regex、regexp、regular expressions、またはその派生形のいずれかの形式を言ってはならないようにしてください。

答えて

0

Eli Benderskyによれば、Pythonでは、提供されたConfigParserを使用する必要があります。

自分で行うことを強くお勧めする場合は、構成を辞書として保存する方法をお勧めします。もう一つの方法は、値を処理し、彼らと何かを関数にオプションをマップすることです:

# Map the options to functions to handle them. 
handlers = { 
    'CFLAGS': some_function, 
    'CXXFLAGS': other_function, 
} 

# Loop through each option. 
for line in configuration: 
    # Get the option and value. 
    option, value = line.split('=') 
    option = option.strip().upper() 
    value = value.strip() 

    # Try to find a handler and process the option. 
    handler = handlers.get(option) 
    if handler: 
     handler(option, value) 
    else: 
     raise Exception('Unknown option.') 

は明らかに、ハンドラ関数は、あなたがそれを渡している optionvalueパラメータを受け入れることができなければなりません。

+0

あなたは値で役に立つものは何もしません。私はオプション名と値をハンドラに渡します(名前はハンドラがいくつかの関連するキーを扱えるようにするためのものです)。 –

+0

@Eli:そうです。それを指摘してくれてありがとう。 – Blair

+0

私はあなたの答えが好きだったので、私はeliをアップヴォーグしました(彼はすでに彼のアップフォートをいくつか持っていたので)。そしてblairを受け入れました。ありがとう – Enders

4

Pythonでは、ConfigParserモジュールを使用して、.iniのような設定ファイルを解析します。

これを自分で実装すると、設定データを一種の辞書として表示すると便利です。これは自然にPythonのdictsに変換し、私は<key> = <value>に行を分割する場合、私はちょうどに行くとアップデート:この方式では

confdict[key] = value 

、設定ファイル内のキーの順序は、ちょうどそれのように、重要ではありません。辞書自体には関係ありません。キーの値を参照できる限り、あなたは満足しています。あなたが(関連するメソッドが_readある)例えば、ConfigParserのボンネットの下を見ると


、あなたは、これはそれがない正確に何がわかります。オプションは辞書に保持されます(.ini構成ファイルの階層レベルが1つであるため、セクションごとに1つ)。行は正規表現を使用してファイルから解析され、前述のようにkey, valueのペアが辞書に追加されます。


これはPythonです。 C言語では、これを行うためのライブラリがかなりあると思いますが、独自のアルゴリズムを実装することは全く同じアルゴリズムに従います。あなたは辞書(ハッシュテーブル、ツリー、または何でも、重要ではない)のための何らかの連想配列データ構造を使用して、同じ構文解析&を割り当てます。

関連する問題