カンマ区切り値

ウィキペディアから、無料の百科事典
ナビゲーションにジャンプ 検索にジャンプ
カンマ区切り値
CsvDelimited001.svg
ファイル名拡張子.csv
インターネットメディアタイプtext/csv[1]
フォーマットの種類マルチプラットフォームのシリアルデータストリーム
のための容器フィールド区切りリストとして編成されたデータベース情報
標準RFC 4180

カンマ区切り値CSVファイルは、カンマを使用して値を区切る区切りテキストファイルです。ファイルの各行はデータレコードです。各レコードは、コンマで区切られた1つ以上のフィールドで構成されます。フィールド区切り文字としてのコンマの使用は、このファイル形式の名前のソースです。CSVファイルは通常、表形式のデータ(数値とテキスト)をプレーンテキストで保存します。この場合、各行には同じ数のフィールドが含まれます。

CSVファイル形式は完全に標準化されていません。フィールドをコンマで区切ることが基本ですが、データ内のコンマまたは埋め込まれた改行は特別に処理する必要があります。一部の実装ではそのようなコンテンツを許可していませんが、他の実装ではフィールドを引用符で囲んでいます。これにより、データにコンテンツが存在する場合は、これらをエスケープする必要があります。

「CSV」という用語は、セミコロンなどの他のフィールド区切り文字を使用する、密接に関連するいくつかの区切り文字で区切られた形式も示します。[2]これらには、タブ区切りの値とスペース区切りの値が含まれます。データの一部ではないことが保証されている区切り文字は、解析を大幅に簡素化します。

非カンマフィールドセパレータを使用しているにもかかわらず、代替の区切り文字で区切られたファイルには、多くの場合、.csv拡張子が付けられます。この緩い用語は、データ交換で問題を引き起こす可能性がありますCSVファイルを受け入れる多くのアプリケーションには、区切り文字と引用文字を選択するオプションがあります。多くのヨーロッパのロケールでは、コンマを小数点記号として使用し、場合によってはピリオドを小数点グループ文字として使用するために、コンマの代わりにセミコロンが使用されることがよくあります(ロケールを参照)。

データ交換

CSVは、消費者、ビジネス、および科学のアプリケーションで広くサポートされている一般的なデータ交換形式です。その最も一般的な用途の中には、互換性のない(多くの場合、プロプライエタリまたは文書化されていない)形式でネイティブに動作するプログラム間で表形式のデータを移動することがあります[3] [4] 。[1]これは、RFC 4180(またはその他の標準)に準拠していない場合でも機能します。これは、非常に多くのプログラムがデータインポート用のCSV形式のバリエーションをサポートしているためです。

たとえば、ユーザーは、独自の形式でデータを保存するデータベースプログラムから、まったく異なる形式を使用するスプレッドシートに情報を転送する必要がある場合があります。ほとんどのデータベースプログラムはデータをCSVとしてエクスポートでき、エクスポートされたCSVファイルはスプレッドシートプログラムによってインポートできます。

仕様

RFC  4180は、CSV形式の仕様を提案しています。ただし、実際の慣行はRFCに準拠していないことが多く、「CSV」という用語は次のようなファイルを指す場合があります。[1] [5]

  1. ASCIIなどの文字エンコード、さまざまなUnicode文字エンコード(UTF-8など)、EBCDIC、またはShiftJISを使用したプレーンテキストです
  2. レコードで構成され(通常、1行に1つのレコード)、
  3. レコードが区切り文字で区切られたフィールドに分割されている場合(通常、コンマ、セミコロン、タブなどの単一の予約文字。区切り文字にオプションのスペースが含まれる場合があります)、
  4. ここで、すべてのレコードには同じフィールドのシーケンスがあります。

これらの一般的な制約の範囲内で、多くのバリエーションが使用されています。したがって、追加情報(RFC 4180が尊重されるかどうかなど)がないと、単に「CSV」形式であると主張されるファイルは完全には指定されません。その結果、CSVファイルをサポートする一部のアプリケーションでは、ユーザーはファイルの最初の数行をプレビューしてから、区切り文字、引用符の規則などを指定できます。たとえば、MSExcelのテキストインポートウィザード。

歴史

カンマ区切り値は、パーソナルコンピュータより10年以上前のデータ形式です。1972年にOS / 360でサポートされたCSVでのIBMFortran (レベルH拡張)コンパイラ[6]リスト指定(「自由形式」)入力/出力は、1978年に承認されたFORTRAN 77で定義されました。リスト指向の入力では、区切り文字にコンマまたはスペースを使用したため、引用符で囲まれていない文字列にコンマまたはスペースを含めることはできませんでした。[7]

「カンマ区切り値」および「CSV」の略語は1983年までに使用されていました。[8] SuperCalcスプレッドシートをバンドルしたOsborneExecutiveコンピューターのマニュアルには、文字列にカンマを埋め込むことを許可するCSV引用符の規則が記載されています。マニュアルでは、引用符で囲まれた文字列内に引用符を埋め込むための規則は指定されていません。[9]

カンマ区切りの値リストは、固定列に整列されたデータよりも入力が簡単で(たとえば、パンチカードに)、値が意図した場所から1列離れた場合に誤った結果を生成する可能性が低くなりました。

コンマ区切りファイルは、2つの異なるアーキテクチャのマシン間でデータベース情報を交換するために使用されます。CSVファイルのプレーンテキスト文字は、バイトオーダーワードサイズなどの非互換性を大幅に回避します。ファイルは主に人間が読める形式であるため、完全なドキュメントやコミュニケーションがない場合でも、ファイルを処理する方が簡単です。[10]

「事実上のファジー定義」をより正確で適切なものに変換する主な標準化イニシアチブは、 RFC 4180で2005年に行われ、CSVMIMEコンテンツタイプとして定義しました。[11]その後、2013年に、RFC4180の欠陥のいくつかがW3C勧告によって取り組まれました。[12] 

2014年、IETFは、CSVドキュメントへのURIフラグメントの適用を説明するRFC7111 を公開しました。RFC 7111は、位置インデックスを使用してCSVドキュメントから行、列、およびセルの範囲を選択する方法を指定しています。[13]

2015年にW3Cは、正式なセマンティクスでCSVを強化する試みとして、同じ年の12月に推奨事項として開始されたCSVメタデータ標準の推奨事項の最初のドラフトを公開しました。[14]

一般的な機能

CSV形式は、各レコードに同じフィールドのリストがあるレコードのセットまたはシーケンスを表すのに最適です。これは、リレーショナルデータベースの単一のリレーション、または一般的なスプレッドシートのデータ(計算ではありません)に対応します。

この形式はビジネスコンピューティングの初期にまでさかのぼり、内部ワードサイズ、データ形式のニーズなどが異なるコンピューター間でデータを渡すために広く使用されています。このため、CSVファイルはすべてのコンピュータープラットフォームで共通です。

CSVは、値を区切るためにコンマを使用する区切りテキストファイルです(CSVインポート/エクスポートツールの多くの実装では、他の区切り文字を使用できます。たとえば、*の最初の行として「Sep = ^」行を使用します。 csvファイルを使用すると、Excelは、カンマ "、"ではなく区切り文字 "^"を期待してファイルを開きます。単純なCSV実装では、コンマまたは改行などの他の特殊文字を含むフィールド値が禁止される場合があります。より洗練されたCSV実装では、多くの場合、 "(二重引用符)を要求することでそれらを許可します)予約文字を含む値の前後の文字(コンマ、二重引用符、またはあまり一般的ではないが改行など)。埋め込まれた二重引用符は、連続する二重引用符のペア[15]で表すか、二重引用符の前に円記号などのエスケープ文字を付けることで表すことができますSybase Centralなど)。

CSV形式は、特定の文字セットに限定されません。[1]これらは、ASCIIと同様にUnicode文字セット(UTF-8UTF-16など)でも同様に機能します(ただし、CSVをサポートする特定のプログラムには独自の制限がある場合があります)。CSVファイルは通常、ある文字セットから別の文字セットへの単純な変換にも耐えることができます(ほとんどすべての独自のデータ形式とは異なります)。ただし、CSVは、使用されている文字セットを示す方法を提供しないため、個別に通信するか、受信側で決定する必要があります(可能な場合)。

複数の関係を含むデータベースは、単一のCSVファイルとしてエクスポートすることはできません[要出典]同様に、CSVは、階層データやオブジェクト指向データを自然に表すことはできません。これは、すべてのCSVレコードが同じ構造を持つことが期待されるためです。したがって、CSVが、 HTMLXML、またはその他のマークアップまたはワードプロセッシングテクノロジで 作成されたドキュメントに適していることはめったにありません。

さまざまな分野の統計データベースは、一般的に関係のような構造を持っていることがよくありますが、いくつかの反復可能な分野のグループがあります。たとえば、人口統計や健康調査などの健康データベースは、通常、特定の親の子供ごとにいくつかの質問を繰り返します(おそらく、子供の最大数は固定されています)。統計分析システムには、多くの場合、そのようなデータを「ローテーション」できるユーティリティが含まれています。たとえば、5人の子に関する情報を含む「親」レコードは、それぞれが(a)1人の子に関する情報、および(b)すべての非子固有の情報のコピーを含む5つの別個のレコードに分割できます。CSVは、そのようなデータの「垂直」形式または「水平」形式のいずれかを表すことができます。

リレーショナルデータベースでは、同様の問題は、そのようなグループごとに個別のリレーションを作成し、外部キー(ID番号や親の名前など)を使用して「子」レコードを関連する「親」レコードに接続することで簡単に処理できます。XMLなどのマークアップ言語では、このようなグループは通常、親要素で囲まれ、必要に応じて繰り返されます(たとえば、単一<child>ノード内の複数の<parent>ノード)。CSVには、広く受け入れられている単一ファイルソリューションはありません。

標準化

「CSV」という名前は、データフィールドを区切るためにコンマを使用することを示します。それにもかかわらず、「CSV」という用語は、多くの点で異なるフォーマットの大規模なファミリを指すために広く使用されています。一部の実装では、一部またはすべてのフィールドを一重引用符または二重引用符で囲むことができます。また、フィールド名のリストを含むヘッダーとして最初のレコードを予約するものもあります。使用されている文字セットは未定義です。一部のアプリケーションでは、Unicodeの解釈を強制するためにUnicodeバイトオーダーマーク(BOM)が必要です(場合によってはUTF-8 BOM)。[1]コンマの代わりにタブ文字を使用するファイルは、タブ区切り値の場合、より正確に「TSV」と呼ぶことができます。

その他の実装上の違いには、より一般的なフィールド区切り文字(スペースやセミコロンなど)やテキストフィールド内の改行文字の処理が含まれます。もう1つの微妙な点は、空白行の解釈です。これは、ゼロフィールドのレコード、またはゼロ長の1フィールドのレコードを書き込んだ結果でも同様に発生する可能性があります。したがって、それをデコードすることはあいまいです。

RFC4180およびMIME標準

2005年の技術標準RFC4180は、CSVファイル形式を形式化し、テキストベースのフィールドを処理するためのMIMEタイプ「text / csv」を定義しています。ただし、各フィールドのテキストの解釈は、アプリケーション固有です。RFC 4180標準に準拠するファイルは、CSV交換を簡素化できるため、広く移植可能である必要があります。その要件の中で:

  • (CR / LF)文字で終わるMS-DOSスタイルの行(最後の行はオプション)。
  • オプションのヘッダーレコード(存在するかどうかを確実に検出する方法がないため、インポートするときは注意が必要です)。
  • 各レコードには、同じ数のコンマ区切りフィールドが含まれている必要があります。
  • 任意のフィールドを引用符で囲むことができます(二重引用符で囲みます)。
  • 改行、二重引用符、またはコンマを含むフィールドは引用符で囲む必要があります。(そうでない場合、ファイルを正しく処理できない可能性があります。)
  • フィールドを囲むために二重引用符を使用する場合、フィールド内の二重引用符は2つの二重引用符文字で表す必要があります。

この形式は、CSVファイルの読み取りを要求するほとんどのプログラムで処理できます。例外は、 a)プログラムが引用符で囲まれたフィールド内の改行をサポートしない場合、(b)プログラムがオプションのヘッダーをデータと混同したり、最初のデータ行をオプションのヘッダーとして解釈したりする場合、および(c)フィールド内の二重引用符がサポートされない場合がある場合です。自動的に正しく解析されます。

OKF摩擦のない表形式のデータパッケージ

2011年に、Open Knowledge Foundation(OKF)とさまざまなパートナーがデータプロトコルワーキンググループを作成しました。このワーキンググループは、後に摩擦のないデータイニシアチブに発展しました。彼らがリリースした主なフォーマットの1つは、表形式のデータパッケージでした。表形式のデータパッケージはCSVに大きく基づいており、CSVを主要なデータ転送形式として使用し、基本的なタイプとスキーマのメタデータを追加しました(CSVには、文字列「1」と数値1を区別するためのタイプ情報がありません)。[16]

摩擦のないデータイニシアチブは、CSVのさまざまな方言を記述するための標準のCSV方言記述形式も提供しています。たとえば、フィールド区切り文字や引用符の規則を指定します。[17]

W3C表形式データ標準

2013年、W3Cの「CSVon the Web」ワーキンググループは、CSVまたは同様の形式を使用するWebアプリケーションの相互運用性を高めるテクノロジーの指定を開始しました。[18]ワーキンググループは、2016年2月に作業を完了し、2016年3月に正式に閉鎖され、 「表形式データ」のモデリング[20]およびメタデータセマンティクスによるCSVの強化に関する一連のドキュメントとW3Cの推奨事項[19]がリリースされました。 。

基本ルール

「CSV」形式を説明する多くの非公式文書が存在します。 IETF RFC 4180(上記で要約)は、 IANAに登録されている「text / csv」MIMEタイプの形式を定義します。

これらおよびその他の「CSV」仕様と実装に典型的なルールは次のとおりです。

  • CSVは、フィールド/列がコンマ文字区切られ、レコード/行が改行で終了する区切りデータ形式です。
  • CSVファイルには、特定の文字エンコードバイトオーダー、または行末記号形式は必要ありません(一部のソフトウェアはすべての行末のバリエーションをサポートしていません)。
  • レコードはラインターミネータで終了します。ただし、行末記号はフィールド内にデータとして埋め込むことができるため、ソフトウェアは、おそらく複数の行からレコード全体を正しくアセンブルするために、引用符で囲まれた行区切り記号(以下を参照)を認識する必要があります。
  • すべてのレコードには、同じ数のフィールドが同じ順序で含まれている必要があります。
  • フィールド内のデータは、ビットまたはバイトのシーケンスとしてではなく、文字のシーケンスとして解釈されます(RFC 2046、セクション4.1を参照)。たとえば、数値65535は、5つのASCII文字「65535」(または「0xFFFF」、「000065535.000E + 00」などの他の形式)として表すことができます。ただし、2文字ではなく単一の2進整数として扱われることを目的とした、2バイトのシーケンスとしてではありません(たとえば、11264〜11519の数字は、上位バイトとしてコンマを使用します:) この「プレーンテキスト」規則に従わないと、CSVファイルに正しく解釈するための十分な情報が含まれなくなり、CSVファイルは異なるコンピュータアーキテクチャ間での送信に耐えられなくなり、text / csvMIMEタイプに準拠しなくなります。ord(',')*256..ord(',')*256+255
  • 隣接するフィールドは、1つのコンマで区切る必要があります。ただし、「CSV」形式は、この区切り文字の選択によって大きく異なります。特に、コンマが小数点記号として使用されている ロケールでは、代わりにセミコロン、TAB、またはその他の文字が使用されます。
    1997年、フォード、E350
  • 次のルールと例で指定されているように、 任意のフィールド引用符で囲む(つまり、二重引用符で囲む)ことができますが、一部のフィールドは引用符で囲む必要があります。
    「1997」、「フォード」、「E350」
  • カンマまたは二重引用符が埋め込まれたフィールドは引用符で囲む必要があります。
    1997年、フォード、E350、「超豪華トラック」
  • 埋め込まれた各二重引用符文字は、二重引用符文字のペアで表す必要があります。
    1997年、フォード、E350、「スーパー、「豪華な」「トラック」
  • 改行が埋め込まれているフィールドは引用符で囲む必要があります(ただし、多くのCSV実装は改行が埋め込まれていません)。
    1997年、フォード、E350、「今すぐ入手してください
    彼らは速く進んでいます」
    
  • 一部のCSV実装では[どちらですか?]、先頭と末尾のスペースとタブはトリミングされます(無視されます)。このようなトリミングはRFC4180で禁止されており、「スペースはフィールドの一部と見なされるため、無視してはなりません」と記載されています。
    1997年、フォード、E350
    と同じではありません
    1997年、フォード、E350
    
  • RFC 4180によると、フィールド内の引用符の外側のスペースは許可されていません。ただし、RFCには、「スペースはフィールドの一部と見なされるため、無視してはならない」とも記載されています。「実装者は、CSVファイルを処理するときに、「自分の行動を保守的にし、他の人から受け入れることを寛大にする」(RFC 793、セクション2.10)必要があります。」
    1997年、「フォード」、E350
  • 先頭または末尾のスペースを削除するCSV実装では、意味のあるデータなどのスペースを含むフィールドを引用符で囲む必要があります。
    1997年、フォード、E350、「超豪華トラック」
  • 二重引用符の処理は、フィールドが二重引用符で始まる場合にのみ適用する必要があります。ただし、RFC 4180では、引用符で囲まれていないフィールドに二重引用符を使用することはできません。
    ロサンゼルス、北緯34度03分、西経118度15分
    ニューヨーク市、北緯40度42分46秒、西経74度00分21秒
    パリ、48°51′24″ N、2°21′03″ E
    
  • 最初のレコードは、各フィールドに列名を含む「ヘッダー」である可能性があります(ファイルがこれを行うかどうかを判断する信頼できる方法はありませんが、文字、数字、およびそのような列名にはアンダースコアが付いています)。
    年、メーカー、モデル
    1997年、フォード、E350
    2000年、マーキュリー、クーガー
    

作る モデル 説明 価格
1997年 フォード E350 ac、abs、moon 3000.00
1999年 シボレー ベンチャー「拡張版」 4900.00
1999年 シボレー ベンチャー「拡張版、非常に大きい」 5000.00
1996年 ジープ グランドチェロキー 売らなければならない!
空気、月の屋根、ロード
4799.00

上記のデータテーブルは、CSV形式で次のように表すことができます。

年、メーカー、モデル、説明、価格
1997、Ford、E350、 "ac、abs、moon"、3000.00
1999、Chevy、 "Venture" "Extended Edition" ""、 ""、4900.00
1999、Chevy、 "Venture" "Extended Edition、Very Large" "" ,, 5000.00
1996年、ジープ、グランドチェロキー、「売らなければならない!
空気、月の屋根、ロード済み」、4799.00

USA / UK CSVファイルの例(小数点はピリオド/ピリオドで、値の区切り文字はコンマです):

年、メーカー、モデル、長さ
1997年、フォード、E350、2.35
2000年、マーキュリー、クーガー、2.38

類似のヨーロッパのCSV / DSVファイルの例(小数点はコンマ、値の区切り文字はセミコロン):

年;製造;モデル;長さ
1997;フォード; E350; 2,35
2000;マーキュリー;クーガー; 2,38

後者の形式はRFC4180に準拠していません。[21]コンプライアンスは、区切り文字としてセミコロンの代わりにコンマを使用し、小数点を表すための国際表記または小数点のあるすべての数値を引用する方法のいずれかによって達成できます。

アプリケーションサポート

一部のアプリケーションは、CSVをデータ交換形式として使用して、CSVの相互運用性、エクスポート、およびインポートを強化します。内部形式としてCSVを使用するものもあります

データ交換形式として:CSVファイル形式は、ほとんどすべてのスプレッドシートとデータベース管理システムでサポートされています。

  • Unixスタイルのシステムの多くのユーティリティプログラム( cutpastejoinsortuniqawkなど)は、コンマ区切り文字でファイルを分割できるため、単純なCSVファイルを処理できます。ただし、このメソッドは、引用符で囲まれた文字列内のコンマを正しく処理しません。

(メインまたはオプションの)内部表現として。ネイティブまたは外部にすることができますが、別の形式でコピーを作成する必要がないため、交換形式(「エクスポート/インポートのみ」)とは異なります。

  • 一部のリレーショナルデータベースは、標準SQLを使用する場合、外部データラッパー(FDW)を提供します。たとえば、PostgreSQLは、CSVの任意のバリアントを構成するための「CREATEFOREIGNTABLE」 [23]および「CREATEEXTENSIONfile_fdw [24]」を提供しています。
  • Apache Hiveのようなデータベースは、CSVまたは.csv.gzを内部テーブル形式として表現するオプションを提供します。
  • emacsエディターはcsv-navモードを使用してCSVファイルを操作できます。[25]

CSV形式は、多くのプログラミング言語で利用可能なライブラリでサポートされています。ほとんどの場合、フィールド区切り文字、小数点記号、文字エンコード、引用規則、日付形式など を指定する方法が提供されます。

ソフトウェアと行の制限

CSVで動作する各ソフトウェアには、CSVファイルが持つことができる行の最大数に制限があります。以下は、一般的なソフトウェアとその制限のリストです。[26]

  • Microsoft Excel:1,048,576行の制限。
  • Apple番号:1,000,000行の制限。
  • Googleスプレッドシート:5,000,000セル制限(列と行の積)。
  • OpenOfficeとLibreOffice:1,048,576行の制限。
  • テキストエディタ(ワードパッド、テキストエディット、Vimなど):行やセルの制限はありません。
  • データベース(COPYコマンドおよびFDW):行またはセルの制限はありません。

も参照してください

参考文献

  1. ^ a b c d e Shafranovich、Y。(2005年10月)。CSVファイルの一般的な形式とMIMEタイプIETFp。1.土井10.17487 / RFC4180RFC4180_
  2. ^ IBMDB2管理ガイドIBM。
  3. ^ 「CSV-カンマ区切り値」2017年12月2日取得
  4. ^ 「CSVファイル」2014年6月4日取得
  5. ^ 「カンマ区切り値(CSV)標準ファイル形式」Edoceo、Inc 2014年6月4日取得
  6. ^ OSおよびVM / 370一般情報のCMSコンポーネント用のIBMFORTRANプログラム製品(PDF)(初版)、1972年7月、p。17、GC28-6884-0 、 2016年2月5日取得、前身のFORTRAN IV GおよびHプロセッサーに精通しているユーザーにとって、これらは主要な新しい言語機能です。
  7. ^ 「リスト指向I / O」Fortran 77言語リファレンス、Oracle
  8. ^ 「SuperCalc²、IBM用スプレッドシートパッケージ、CP / M」2017年12月11日取得
  9. ^ 「カンマ区切り値形式のファイル構造」2017年12月11日取得
  10. ^ 「CSV、カンマ区切り値(RFC 4180)」2014年6月4日取得
  11. ^ RFC 4180:コンマ区切り値(CSV)ファイルの一般的な形式とMIMEタイプ土井10.17487 / RFC4180RFC4180 _ 2020年12月22日取得
  12. ^ CSVでスコープされ、RFC4180のいくつかの欠陥を埋める最初のW3C勧告であるsparql11-results-csv-tsvを参照してください
  13. ^ RFC 7111:text / csvメディアタイプのURIフラグメント識別子土井10.17487 / RFC7111RFC7111 _ 2020年12月22日取得
  14. ^ 「Web上の表形式のデータとメタデータのモデル–W3C勧告2015年12月17日」2016年3月23日取得
  15. ^ * Creativyst(2010)、方法:コンマ区切り値(CSV)ファイル形式、creativyst.com 、 2010年5月24日取得
  16. ^ 「表形式のデータパッケージ」摩擦のないデータ仕様
  17. ^ 「CSV方言」摩擦のないデータ仕様
  18. ^ 「WebワーキンググループのCSV」W3C CSVWG。2013 2015年4月22日取得
  19. ^ Webリポジトリ上のCSV(GitHub上)
  20. ^ Web上の表形式のデータとメタデータのモデル(W3C勧告)
  21. ^ Shafranovich(2005)は、「ヘッダーと各レコード内に、コンマで区切られた1つ以上のフィールドが存在する場合があります」と述べています。
  22. ^ https://www.postgresql.org/docs/current/sql-copy.html
  23. ^ https://www.postgresql.org/docs/current/postgres-fdw.html
  24. ^ https://www.postgresql.org/docs/current/file-fdw.html
  25. ^ 「EmacsWiki:CsvNav」
  26. ^ 「CSVと行の制限を理解する」2021年2月28日取得

さらに読む