Thu Mar 13 18:54:15 JST 2014 (modified: Sat Sep 30 16:15:34 JST 2017)
views: 1471, keywords:コマンド,open,TukubaiはTukubaとちゃうんやで〜,シェル芸 この記事は最終更新日が7年以上前のものです。
タブ・スペース問題に対するopen usp Tukubaiの対応および余計な一言
やっと確変が終わりました。あまり釣りに走らず、しっかり技術の話を書いておきます。検索で「Tukubai、スペース、タブ」でこのサイトに来てしまった人がいたので、ちゃんと説明しなければならんと。ただ、これはオープン版に対する私の解釈ですので、会社は関係ありません。
知ってる人は知っていて、私もいろんなところで説明を求められるのですが、Open usp Tukubaiはスペースでデータを区切ります。
やっと確変が終わりました。技術の話を書いておきます。検索で「Tukubai、スペース、タブ」でこのサイトに来てしまった人がいたので、ちゃんと説明しなければならんと。ただ、これはオープン版に対する私の解釈ですので、会社は関係ありません。
知ってる人は知っていて、私もいろんなところで説明を求められるのですが、Open usp Tukubaiはスペースでデータを区切ります。
ということはスペースを入れたかったらアンダースコアなどを代替せねばなりません。これがcsvにしろとか、tsv(タブ区切り)にしろとか、いろいろ言われる原因になってるわけです。普通に聞いてくれるならいいのですが、時間がないのに滔々と持論を並べる人がたまにいるものですから、うるさいと口に出してしまって互いに血まみれになることがあるわけです。
理由1: データのバグ防止
catした時にタブとスペースは区別がつきません。これがシェル芸的な作業の敵になります。
理由2: 普通のコマンドも大概スペース区切りのデータを扱う
残念ながらコマンドは英語圏で発達したので、テキスト処理系のコマンドは単語がスペース区切りになっていることが前提になってます。open usp Tukubaiもそれに合わせてスペース区切りです。
結局・・・
人の扱う文書やデータを扱っている以上、たとえスペースをアンダースコアに変換が必要であっても、今のところopen usp Tukubaiはスペース区切りを選んでいます。常に人の書くデータ、人の読むデータを扱う上では、そのような選択もお認めいただきたく。
夕飯。
bashuedambp:~ ueda$ cat hoge.sp a b c d e f uedambp:~ ueda$ tarr hoge.sp a b c d e f uedambp:~ ueda$ cat hoge.tab ←タブ区切りファイル a b c d e f ###tarr(単語を縦に並べる)はtab区切りだと効かない### uedambp:~ ueda$ tarr hoge.tab a b c d e f ###delfは即死(ちゃんとエラー処理を実装しないといけないとは思いつつ・・・放置!)### uedambp:~ ueda$ delf 2 hoge.tab Traceback (most recent call last): File "/usr/local/bin/delf", line 149, in <module> op.output(tokens) File "/usr/local/bin/delf", line 80, in output tokens[i] = None IndexError: list assignment index out of range ###ただしselfだけはタブを受け付けるという・・・(未定義動作)### uedambp:~ ueda$ self 2 hoge.tab b e
ということはスペースを入れたかったらアンダースコアなどを代替せねばなりません。これがcsvにしろとか、tsv(タブ区切り)にしろとか、いろいろ言われる原因になってるわけです。普通に聞いてくれるならいいのですが、こちらが聞いてもないのに滔々と持論を並べる人がたまにいるものですから、うるさいと口に出してしまって互いに血まみれになり、汗まみれになり、友情が生まれることがあるわけです。ない。
理由1: データのバグ防止
catした時にタブとスペースは区別がつきません。これが理由の90%です。目視できないものはシェル芸的な作業の敵になります。いや、目grepやれとかそういうことでなく・・・。特に大きなスペース区切りのデータを扱っていて、中にタブがあるとわけが分からん出力が出てきて困るわけですが、タブが原因だとなかなか気づかないで悩むということはたまにあります。
・・・ただまあ、コードではタブ使っちゃいますけど。
理由2: 普通のコマンドも大概スペース区切りのデータを扱う
残念ながらコマンドは英語圏で発達したので、テキスト処理系のコマンドは単語がスペース区切りになっていることが前提になってます。open usp Tukubaiもそれに合わせてスペース区切りです。タブもだいたい区切りとして認識してくれる場合もあるのですが、そしたら空白区切りとタブ区切りの混ざったtsvとかはオプションで区切り文字を指定しなければならず扱いが面倒になります。それから、trとかsedを使おうとしたら結構タブがまざっていると面倒だったりします。
ちょっと話が違うかもしれませんが、fstabでタブを使ってしまってマッシーンが再起動しなくなった人って、どれくらいいますかね?
結局・・・
人の扱う文書やデータを扱っている以上、たとえスペースをアンダースコアに変換が必要であっても、今のところopen usp Tukubaiはスペース区切りを選んでいます。常に人の書くデータ、人の読むデータを扱う上では、そのような選択もお認めいただきたく。
しかし、Open版の作りは簡素で基本的に言語のsplitみたいな関数を使って単語を区切る作りになっているので、使う言語(今のところPython、今Haskell版構築中)によってはタブをサポートしてしまうかもしれません。ただ、一応未定義動作といたします。
しかしこう見ると、タブって便利なんだけど罪作りですね。タブインデントとスペースインデント戦争とか・・・。
夕飯。