web-dev-qa-db-ja.com

人間が読める最も簡単な構成ファイルの形式は何ですか?

現在の構成ファイルは次のとおりです。

mainwindow.title = 'test'
mainwindow.position.x = 100
mainwindow.position.y = 200

mainwindow.button.label = 'apply'
mainwindow.button.size.x = 100
mainwindow.button.size.y = 30

logger.datarate = 100
logger.enable = True
logger.filename = './test.log'

これはpythonでネストされた辞書に読み込まれます:

{
  'mainwindow':{
    'button':{
      'label': {'value':'apply'},
       ...
  },
  'logger':{
     datarate: {'value': 100},
     enable: {'value': True},
     filename: {'value': './test.log'}
  }, 
  ...    
}

これを行うより良い方法はありますか?アイデアは、XMLタイプの動作を取得し、できるだけ長くXMLを回避することです。エンドユーザーはほぼ完全にコンピュータの読み書きができないと想定され、基本的にメモ帳とコピーアンドペーストを使用します。したがって、python標準の「ヘッダー+変数」タイプは非常に難しいと考えられています。

ダミーユーザーは設定ファイルを編集し、有能なプログラマーが辞書を処理します。ネストされたディクショナリは、分割を容易にするために選択されます(ロガーはメインウィンドウのパラメーターを必要としないか、または持つこともできません)。

13
Juha

[〜#〜] yaml [〜#〜] のようなものを使用できます。次に例へのリンクを示します。

http://www.yaml.org/start.html

--- !clarkevans.com/^invoice
invoice: 34843
date   : 2001-01-23
bill-to: &id001
    given  : Chris
    family : Dumars
    address:
        lines: |
            458 Walkman Dr.
            Suite #292
        city    : Royal Oak
        state   : MI
        postal  : 48046
ship-to: *id001
product:
    - sku         : BL394D
      quantity    : 4
      description : Basketball
      price       : 450.00
    - sku         : BL4438H
      quantity    : 1
      description : Super Hoop
      price       : 2392.00
tax  : 251.42
total: 4443.52
comments: >
    Late afternoon is best.
    Backup contact is Nancy
    Billsmer @ 338-4338.

Pythonバインディングは PyYAML で見つかります。JSONよりもユーザーフレンドリーです(2番目の例はこれです)。

15
jmq

あなたができる最善のことは、あなたのソリューションのモックアップ、そしておそらく他のいくつかのソリューションのモックアップを提供し、あなたのシステムの2人か3人の代表的なユーザーに尋ねることです。彼らは、このサイトで質問に答える自己選択の人々よりも、自分が何が好きかを伝えるのがはるかに上手になります。

そうは言っても、「基本的にコンピュータの読み書きができない」ユーザーにとっては、質問に表示する形式はおそらく最良のプレーンテキスト形式だと思います。それらが実際にコンピュータの読み書きができない場合は、簡単なGUIを検討して、構成ファイルを手動で編集する必要がないようにすることをお勧めします。

6
Bryan Oakley

設定ファイルを読み込もうとしている英語を知らない中国人を想像してみてください。あるいは、構成ファイルがアラビア語である(そして、あなたがアラビア語を知らない)と想像してください。自問してみてください、これは本当に人間が読めるのですか?

読者が英語を知っていても、「logger.datarate = 100」が1秒あたり100文字を意味するか、100 GiB 1時間あたりを意味するか、または1メートルトンあたり100羽のニワトリを意味するか) 。

最も人間が読めるファイル形式は、適切なGUIベースのダイアログボックス/ウィザード/コンフィギュレータ(国際化対応、ヘルプシステムなど)を備えたバイナリファイルです。

3
Brendan

あなたが失うことができるすべてを失います。 name.name.name=valueは、それぞれ別の行にあり、非常に簡単に取得できます。解析に引用符は必要ありません。trueがブール値である場合、およびtrueが文字列である場合は、「愚かな人間」にそれを伝えないでください。文字列の場合、フィールドに先頭/末尾の空白を含めないようにするには、自分で削除します。

3
Ross Patterson

私はあなたが持っているもの(プロパティファイル)はすでに人間が読める構成フォーマットの中で最高だと言っています。 :)

ここに私の引数があります:

  • プロパティファイルは単なるキーと値のペアです。人間が簡単に読める。
  • Xmlとは異なり、簡潔な構文。
  • 例のように、「。」を使用して簡単にネストできます。
  • フラットな構造により、ソース管理された環境で簡単に比較できます。

その最後のポイントは実際にはかなり重要です。最近のプロジェクトはすべてブランチに分割されていることを考えると、構成ファイルはブランチをマージするときに非常に苦痛を引き起こす可能性があります。プロパティファイルのようなフラットファイル形式は、ツリー構造ファイルよりもマージが簡単です。

2
ming_codes

パトリックヒューズと一緒です。設定を編集するためのシンプルなアプリを作成します。設定ファイル自体はもう少し複雑で、エディターが使用する属性(表示名、ヘルプテキスト、値のタイプ、最小/最大値など)を含む場合があります。

2
Misko