差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン前のリビジョン | 最新のリビジョン両方とも次のリビジョン | ||
programming:nim:parse_parameter [2018/10/23] – ikatakos | programming:nim:parse_parameter [2018/10/24] – ikatakos | ||
---|---|---|---|
行 1: | 行 1: | ||
- | ======parseopt, | + | ======parseopt, |
アプリケーションに実行時設定を渡す方法としては大きく分けて「コマンドライン引数」か「設定ファイル」の2つがある。 | アプリケーションに実行時設定を渡す方法としては大きく分けて「コマンドライン引数」か「設定ファイル」の2つがある。 | ||
- | それらを受け取るプログラムを書く際、最近の言語なら、いずれも解析ライブラリが存在している。Nimもご多分に漏れずデフォルトでモジュールが存在する。 | + | 最近の言語なら、いずれも解析ライブラリが存在している。Nimもご多分に漏れずデフォルトでモジュールが存在する。 |
* Nim ver.0.19.0 | * Nim ver.0.19.0 | ||
行 17: | 行 17: | ||
Nimの方はそこまで親切では無いが、とりあえずパースしてキーワードと値(あれば)をセットにするまでやってくれる。後はイテレートして適宜取得する感じ。必要な指定が無いとか重複してるとかのチェックは自分で実装する必要がある。 | Nimの方はそこまで親切では無いが、とりあえずパースしてキーワードと値(あれば)をセットにするまでやってくれる。後はイテレートして適宜取得する感じ。必要な指定が無いとか重複してるとかのチェックは自分で実装する必要がある。 | ||
+ | |||
+ | ただ、正直これなら最初から自分で実装しても大きくは変わらない……くらいの機能である点は否めない。 | ||
^構文^種別^キー^値^ | ^構文^種別^キー^値^ | ||
行 76: | 行 78: | ||
* [[https:// | * [[https:// | ||
- | こちらは第三者モジュールで本家はPythonだが、Nim移植版が存在する。 | + | こちらは第三者モジュール。本家はPythonだが、Nim移植版が存在する。 |
+ | |||
+ | > nimble install docopt | ||
- | docoptは「所定のルールに従ったヘルプ文字列を与えることで、パーサを組み立てる」という逆転の発想のライブラリ。 | + | docoptは「所定のルールに従ったヘルプを文字列で与えることで、パーサを組み立てる」という逆転の発想のライブラリ。 |
より複雑なルールを持ったパーサを、直感的にわかりやすい記法で作成できるので、標準モジュールのparseopt以上のことがしたくなったらこちらが楽。 | より複雑なルールを持ったパーサを、直感的にわかりやすい記法で作成できるので、標準モジュールのparseopt以上のことがしたくなったらこちらが楽。 | ||
行 91: | 行 95: | ||
* [[https:// | * [[https:// | ||
- | ini等でよくある記法の設定ファイルをパースできる。上記の公式解説に例もありわかりやすい。 | + | ini等でよくある、セクション毎に分かれた設定ファイルをパースできる。上記の公式解説に例もありわかりやすい。 |
[Section] | [Section] | ||
行 109: | 行 113: | ||
変数は使えない模様。 | 変数は使えない模様。 | ||
- | また、Windowsのパス区切り文字である「: | + | また、Windowsのドライブパスに含まれる「: |
さらに「\」はエスケープ文字として扱われるため、'' | さらに「\」はエスケープ文字として扱われるため、'' | ||
- | .ini記法のパーサは様々な言語に存在しても、この辺の細かな文字列の解釈の違いは言語毎に異なるため、ややこしいね。 | + | .ini記法のパーサは様々な言語に存在しても、この辺の細かな文字列の解釈の違いは言語毎に異なるため、言語毎に留意が必要。 |