テーブルを出力するプログラムがあり、csv形式とtsv形式の間に長所/短所があるかどうか疑問に思っていました。
TSVは、Javascript/Perl/Pythonにとって非常に効率的であり、タイピング情報を失うことなく、人間にとっても読みやすくなっています。
この形式は、4storeの公開リリース以来サポートされており、合理的に広く使用されています。
私の見方では、CSVはスプレッドシートにロードするためのものであり、TSVはオーダーメイドのソフトウェアによる処理のためのものです。
選択はアプリケーションによって異なります。簡単に言えば、フィールドにコンマが含まれていない場合は、CSVを使用します。それ以外の場合は、TSVが道です。
TL; DR
どちらの形式でも、フィールド内に区切り文字が表示されると問題が発生するため、区切り文字がフィールド区切り文字としてではなく、フィールド内の値として機能していることを示す必要があります。
たとえば、CSVを使用する場合:Kalman, Rudolf
、von Neumann, John
、Gabor, Dennis
いくつかの 基本的なアプローチ は次のとおりです。
フィールド内に表示されるすべての区切り文字を削除します。
例えば。 Kalman Rudolf
、von Neumann John
、Gabor Dennis
文字をエスケープします(通常、バックスラッシュ\
を前に付けます)。
例えば。 Kalman\, Rudolf
、von Neumann\, John
、Gabor\, Dennis
各フィールドを他の文字で囲みます(通常は二重引用符"
)。
例えば。 "Kalman, Rudolf"
、"von Neumann, John"
、"Gabor, Dennis"
フィールドはコンマ,
で区切られます。
例えば:
Name,Score,Country
Peter,156,GB
Piero,89,IT
Pedro,31415,ES
利点:
短所:
フィールドは、<TAB>
または\t
の表で区切られています
例えば:
Name<TAB>Score<TAB>Country
Peter<TAB>156<TAB>GB
Piero<TAB>89<TAB>IT
Pedro<TAB>31415<TAB>ES
利点:
短所:
任意の区切り文字を使用できますが、タブやコンマは、Excel、MySQL、PostgreSQLなどの多くのアプリケーションでサポートされています。カンマはテキストフィールドでは一般的であるため、エスケープする場合は、エスケープする必要があります。それらをエスケープせず、フィールドにコンマが含まれている可能性がある場合、ファイルに対して "sort -k2,4"を自信を持って実行することはできません。とにかくフィールドのいくつかの文字(nullバイト、改行など)をエスケープする必要があるかもしれません。これらの理由などで、私の好みはTSVを使用し、タブ、nullバイト、およびフィールド内の改行をエスケープすることです。さらに、通常はTSVを使用する方が簡単です。タブ区切り文字で各行を分割するだけです。 CSVには、引用符で囲まれたフィールド、場合によっては改行が含まれるフィールドなどがあります。強制された場合にのみCSVを使用します。
通常、csvはtsv形式よりも頻繁にサポートされると思います。