#author("2026-02-16T17:34:50+09:00","","") #author("2026-02-16T17:35:58+09:00","","") 前提条件 - これはtir <-> csv 相互変換ツールです。 - このツールでサポートできないcsv形式はユーザー作成です - このツールはこれ以上機能を増やす予定はありません。 - 変更があるとすればtir versionが変わった時くらいでしょう - それとこれはparserの作り方のチュートリアルを兼ねています - usageの表示とか本質的でない部分は別ファイルに分けるのは良いかもしれません - チュートリアルといってもあまり細々とコメントを入れる気はありません - 変数名などを工夫してなるべく自明なコードにしたいです - そういう点では拡張性は全く必要ありません - わかりやすいことが第一です - わかりやすさのため、拡張性・美しさ、これらは犠牲にして構いません * CSV パーサー [#qf1c3ea6] ** パーサーprobe [#yebdd24f] - command name -- tir discover -- tir probe -- tir resolve -- tir select-parser -- in: file -- out: tir-parser-name, reason -- id: コマンド名tir-*, option --tir-capability ** CSVパーサーを作ります [#qb59d6dc] - pythonの定番CSVパーサーを使う - シバンを指定してコマンドとして使えるようにする - 出力形式:NDJSON:1レコード分読んで1レコード出力できるのが理想 -- { "kind":"grid", "row":[ "aaa", "bbb", "ccc" ] } -- 表形式の行データー(1行だけです。複数行不可です) -- row: 行内容を表す。列の数だけ値を並べる -- row: 全部文字列、なければ空文字列 -- row: 一つの表の中で列数が必ずしも一致する必要はない - 使用例 -- tir-csv parse file :csv形式のfileを読み込んでNDJSON形式でstroutに書き出す -- 成功した場合はstderrには何も表示しない。失敗した場合はstderrに表示する。 --- これで成功、失敗を見分ける ---- ここから先は後で -- tir-csv unparse file :標準入力からNDJSON形式で読み込んでfileに書き出す -- 成功した場合はstderrには何も表示しない。失敗した場合はstderrに表示する。 --- これで成功、失敗を見分ける -- tir-md show :JSON形式で情報を書き出す --- { name:name, desc:description, extensions={ txt, md } } -- tir-md --version:バージョン表示 -- 自作する場合は独自サブコマンドは作らないこと。オプションで対応すること。 -- 自作する場合はparse file, showは必ず作成すること。他は任意 ---- csvの独自フォーマットは属性値が最後の行にある。 一方NDJOSN正規形は属性が最初にないといけない。 だからファイルの最後を読んで属性を解析する必要がある。 - lseek, pread