web-dev-qa-db-ja.com

なぜCSVを使い続けるのですか?

なぜCSVを使い続けるのですか?

私は最近、ヘルスドメインの作業にシフトしました。データ転送標準の素晴らしい仕事にもかかわらず、すべてのデータ転送は[〜#〜] csv [〜#〜]で行われ、どちらも外部組織へのレポート用です、および新しいシステムを実装する際のデータ移行用。

残念ながら、CSVを使用すると、同じ愚かなエラーが無限に繰り返され、開発者の時間も無駄になります。 (不適切なエスケープ、nullフィールドの処理の失敗など)

私たちはもっと上手くできることを知っています。JSONとXMLの間(インスタンスによって異なります)なら何でもかまいません。 (ほとんどの場合、これは1つのMS SQLserver 2005から別のMS SQLserver 2005へのデータです!)

私はこれが起こっているのを見るたびに、ある開発者が別の開発者の時間を浪費しているのを文字通り見ているように感じます。

では、なぜ相互に軸を合わせ続けるのでしょうか。いつ停止しますか?

14
Stephen

あなたの場合、CSVはハード仕様がないため、適切ではないようです。

重要なデータの場合、それは正しい選択ではありません。

なぜ/ CSVが良い選択なのか?おそらく言及するインスタンスが多すぎるため、フラットデータの単純さの利点は明白です。データが適切にサニタイズ/エスケープされている限り、問題はありません。しかし一般的に言えば、これらのケースはすべて単純/取るに足らないものです。もちろん、コンテンツに表示される標準の区切り文字は、CSVを処理するときに多くの場合苦痛です。

しかし、技術的ではないクライアントにExcelシートまたは他の類似のユースケースからデータを送信させるよりも複雑なことをしている場合、CSVはおそらく深刻な用途には不十分です。

XMLの詳細な標準化されたスキーマ仕様を作成できるため、XMLははるかに適しています(JSONよりもはるかに優れています)。 (仕様/スキーマが複数の実装スタイル、XSD、DTD、Relax NGの柔軟性を享受していることは言うまでもありません)

閉ループシステムの場合、特に帯域幅が問題になる場合、JSONはXMLよりも適していますが、スキーマ仕様言語がないため、多くの場合、エンタープライズレベルのアプリケーションからJSONを除外できます。

10
ocodo

CSVを支持していくつかのポイントを捨ててみましょう:

  • CSVはシンプルで(OPで提案されているどの代替手段よりも)実装および解析が簡単です。
  • CSVは、地球上のほとんどすべてのソフトウェア(過去および現在)で理解されています
  • CSVはかなりフラットでシンプルなスキーマを強制します(フィールドの単一フラットリストがあります)
  • CSVは、XML、JSON、または(UGH!)HL7(V2.x、pre-xml)よりも人間が読みやすい形式です
63
G__

下位互換性。外部組織のWebサービスがCSVを処理し、既存のすべてのツールがCSVを処理する場合、どちらの当事者も新しいサービスに移行する動機はありません。外部組織が別のフォーマットをサポートし始めるのはなぜですか?彼らと一緒に働く人は誰もそれを使うことができません!なぜ別のフォーマットを作成し始めるのですか?あなたが協力しているどの組織もそれを受け入れません!

本当の私がここで見る問題は、開発者が毎回独自のCSVコードをローリングしているのはなぜですか?安定した堅実なCSVライブラリを使用した場合、開発者はそうしません。あなたが説明する問題があります。問題は、ライブラリを使用する代わりに独自のソリューションを展開している開発者が原因で発生します。JSONまたはXMLに移行することで魔法のように修正される方法は正直わかりません。ライブラリを使用する代わりに、それらを正規表現で再試行する人々がまだいます。

29
Anon.

CSVは少し速いサイズが小さい、非常に簡単(Excelでも)処理し、多くの既存のアプリケーションはそれを理解しています。広く使用されている標準

それは多くの状況でまだ最初の選択肢です。

私は今でもそのフォーマットがとても好きです。しかし、私もJSONを使用していますが、Web UIのような他のアプリケーションにも使用しています。

15
user2567

何よりもまず、消費 CSVデータは(わずかに)自明ではないかもしれませんが、生成は非常に簡単です。

また、JSONもXMLも(プロデューサーとコンシューマーのどちらにとっても)正しい方が本当に簡単なことも指摘しておきます。実際には、lotsが正規表現を使用してXMLデータを解析しようとしていることを知るために、ほとんど見回す必要はありません。

CSVで発生する(および発生する)問題のほとんどは、JSONとXMLの両方で発生する(および発生する)可能性があります。特にXMLは、それ自身の潜在的な問題をさらに多く追加します。 XMLデータを解析するためのライブラリは、一般に、CSVデータ用の同様のライブラリよりも大きく、遅く、使用が困難です。

15
Jerry Coffin

まず、フォーマットにいくつかの非常に現実的な問題があることに同意します。

  • 文字列型です。
    • テキストと数値を区別しないと、Excelは誤った推測をして、郵便番号とクレジットカード番号を取り除きます。
    • バイナリデータを表す標準的な方法はありません。
    • NULL''を区別する標準的な方法はありません。これは、CSVファイルをSQLデータベースにインポートするときに問題になります。
  • 「特殊文字」の貧弱なサポート。
    • (XML &#xNNNN;またはJSON \uNNNN)のような数字参照がないことは、制御文字または非ASCII文字を表す標準的な方法がないことを意味します。
    • 多くの実装では、フィールド内に改行を適切に実装していません。
  • 標準の欠如。 RFC 418 はありますが、普遍的にフォローされているわけではありません。

しかし、一方で:

  • 代替案はさらに悪い。 JSONとXMLは、ツリーを中心に設計されているため、特にテーブルベースのデータにはあまり適していません...
  • COMPACTNESS!XMLでは、each列の開始タグと終了タグが必要ですeach行。 CSVでは、列ヘッダーを1回だけ書き込みます。
  • CSVの生成は非常に簡単です。
  • プログラマー以外は、ExcelでCSVファイルを開くことができます。
5
dan04

多くのアナリストはExcel(ピボットテーブルなど)を使用しており、ネイティブExcel形式を出力するよりもCSVを出力する方がはるかに簡単です。

脚注:先行ゼロの削除や精度の低下など、ExcelでのCSVファイルの処理で見た問題の数を考えると、これはおそらく簡単であるという誤った感覚です。

4
Scott McIntyre

CSVに1つ問題がある場合、CSVは非常にシンプルに見えるため、多くの開発者が独自のパーサー/ライターを発明しようとし、エスケープを正しく処理しないために後でCSVを非難します。優れたCSVパーサー(非常に優れたもの)があれば、まったく問題はありません。

CSVについて言及している人の一部は、重要なデータには適していませんが、同意しません。 XMLでは、異なるデータセットを異なる「コンテナー」タグに入れることができるため、重要なデータを使用できます。 CSVを使用すると、常に異なるデータを異なるファイルに入れて、同じ効果を得ることができます。

さらに、私の意見では、データ転送にXMLを使用することは基本的にXMLの目的に反します。データ転送は通常、プロバイダーとコンシューマー間の安定した契約を意味しますが、XMLは、消費されると解釈される拡張可能な情報を運ぶことを意図しています。

2
Codism

CSVは、カンマとセミコロン/エンドラインのいずれかが最後にある単純なテキストデータしかない場合に最適です。

ツリーアーキテクチャデータまたは複合データは、CSVではほとんど使用できません。

CSVは、Excelのようなテキストの単純な2D配列です。

1
jokoon

ここでメインフレームとExcelがすべてです。

メインフレームは、それらの古いシステムがCSVを使用して通信する方法を理解したためです。そのため、データをダンプする大きなアプリは、データを読み書きでき、今変更する必要はありません。

CSVを直接開くことができるため、Excel。実際、インストールすると.csv拡張子が引き継がれます。ユーザーは、少しおかしく見えるExcelアイコンをクリックするだけで、それが開いて、くつろげる素敵なグリッドが作成されます。

現在のバージョンのExcelは、XMLなどを直接読み取ることができます。しかし、そのためには、ユーザーは「その画像をダブルクリックする」ことをもう少し理解する必要があります。また、右の画像をダブルクリックすると、一部の業界では質問が多すぎる場合があります。 。 。

1
Wyatt Barnett