厳密な円柱形

厳密な円柱形

Unixパイプの創設者であり、Unixの伝統の創設者の一人であるDoug McIlroyは、当時、次のように述べています[McIlroy78]。

(ii) 各プログラムの出力は、未知の他のプログラムの入力になると予想される。不要な情報で出力を複雑にしないでください。厳密な列形式またはバイナリ入力形式を避けてください。インタラクティブな入力にこだわらないでください。

厳密に言えば、柱状のデータは私によく聞こえるので、彼が何を意味するのか理解できないかもしれません。

これは何を意味し、なぜ悪いのですか?

答え1

私の考えでは、その人が言うと思います。調整通常の列データではなく列。これが私の理解です厳しくそれでも。たとえば、

悪い:

1    200 3
100  3   400

いいね:

1 200 3
100 3 400

つまり、人よりもコンピュータが読みやすいファイルを作成します。アイテムを並べ替えるためにスペースを追加すると、わかりやすく、わかりやすくなりますが、解析が必要なプログラムでは混乱を招く可能性があります。

cutたとえば、上記の各例の2番目のフィールドを取得するために、最初のフィールドは失敗します。

$ cut -d' ' -f 2 bad


$ cut -d' ' -f 2 good 
200
3

badファイルの 2 番目のフィールドは、余分なスペースがあるためスペースです。ただし、ドキュメントで期待どおりに機能しますgood

答え2

厳密な円柱形

fixed withそしてordered columnsVSdynamic widthheaders

はい

固定幅

名前(7バイト)[スペース]年齢(2バイト)[スペース]キー(5バイト)

alice   10 150cm 
bob     20 160cm
carol   30 170cm

Alexander今年齢40とキーを追加する必要がある場合180cm

alice   10 150cm 
bob     20 160cm
carol   30 170cm
Alexa~1 40 180cm

厳しい柱構造に合わず、より柔軟な柱構造を使用するとスペースが不足します。

スペースで区切られた値

スペースで区切られた値を使用すると、これらの問題を回避できます。

alice 10 150cm 
bob 20 160cm
carol 30 170cm
Alexander 40 180cm

スペースで区切られた値

または、列を区切る1つ以上のスペースで書式設定します。

alice     10 150cm 
bob       20 160cm
carol     30 170cm
Alexander 40 180cm

スペースの数は重要ではないため、必要に応じて人間が読みやすいようにフォーマットしたり、ファイルの密度を指定したりできます。 Unix哲学の観点からも、この形式は最初の行が空白の名前である場合、列の順序や存在を強制しません。列の後にデータスペースで区切られたファイルが続きます。

Name      Age Height
alice     10  150cm 
bob       20  160cm
carol     30  170cm
Alexander 40  180cm

そして

Age Height Name      
10  150cm  alice
20  160cm  bob
30  170cm  carol
40  180cm  Alexander

ヘッダーに気にしない追加の列がある場合は、最初のものと同じように機能します。これにより、より柔軟性が得られます。

Age Height t_shirt_size Name      
10  150cm  S            alice
20  160cm  M            bob
30  170cm  L            carol
40  180cm  XL           Alexander

Name私たちはまだ、、、およびをAge読むことができ、Height私たちが気にしないヘッダーを持つ列を無視できます。それでもオブジェクトにロードされています

[{"Name":"alice",    "Age":10, "Height":"150cm"},
 {"Name":"bob",      "Age":20, "Height":"160cm"},
 {"Name":"carol",    "Age":30, "Height":"170cm"},
 {"Name":"Alexander","Age":40, "Height":"180cm"}]

これらのルールにより、CSVなどのファイル形式が生成されました。https://www.rfc-editor.org/rfc/rfc4180

Age,Height,t shirt size,Name      
10,150 cm,S,alice
20,160 cm,M,bob
30,170 cm,L,carol
40,180 cm,XL,Alexander

これを避けることで、stringently columnar data未知のプログラムが修正されていないプログラムに入力される可能性が高くなります。

私のプログラムがデータをCSV形式で出力すると、私が存在するかどうかわからない多数のプログラムがそれを読み込んでプロットすることができます。

関連情報