• ベストアンサー

CSVの仕様について

改行コードとカンマの取り扱い。 最近の一般的なWINDOWSアプリケーションでCSVの取り扱いは (1) 行区切りの改行コードはCRLFで行います。 データ内の改行コードは、LFで行う。 (2) カンマ付きのデータは『"』クォーテーションで囲む その際、元のデータ内の『"』は『""』でエスケープ。 (1)(2)の仕様でよいのでしょうか? 自身でCSV生成とパースを書きたいのですが、RFCは参考にしますが、 実際のポュラーな仕様に合わせたいので調べています。 ご意見でも構いません宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • wormhole
  • ベストアンサー率28% (1622/5659)
回答No.1

(1)の「データ内の改行コードは、LFで行う。」はどちらかといえば (2)に属していて「カンマおよび改行コード(LF or CRLFは問わない)が含まれているデータは ダブルクォーテーションでくくる」ではないでしょうか。

akaginoyama
質問者

お礼

回答ありがとうございます。 LFのデータが存在する以上それに沿ってつくる方がよいですね。

その他の回答 (2)

  • MARU4812
  • ベストアンサー率43% (196/452)
回答No.3

一般に…というのであれば、 CSV ファイルはテキストエディタの仕様に合わせるべきで、 Windows 環境ならデータ内であっても CRLF という考え方 を支持します。 http://codezine.jp/article/detail/2364 (Excel の仕様はデフォルトで数値・日付の変換を 行なうので技術者には嫌う人も多いです。データ内に LF と CRLF が混在していた場合でも、正常に読める ようですが、セル入力での改行は LF しかないのでは? 編集まで視野に入れるなら Excel では CSV の仕様 に合っていない(力不足)です。)

akaginoyama
質問者

お礼

>EXEL~セル入力での改行は LF しかないのでは? そのように思えます。 これがネックになるので、LFコードはそのまま扱えるようにすることにします。 回答ありがとうございました。

  • aton
  • ベストアンサー率47% (160/334)
回答No.2

直接の回答ではありませんが…。 なんにせよExcelが基準になっていると思うので,気になる仕様についてはExcelに読み書きさせてみるといいのではないでしょうか?

参考URL:
http://ja.wikipedia.org/wiki/Comma-Separated_Values
akaginoyama
質問者

お礼

回答ありがとうございます。 やはり、エクセルは基準から外せませんね。

関連するQ&A

  • テキストファイルウィザードを使用したCSVファイル読み込みの挙動について【Excel2003】

    テキストファイルウィザードを使用したCSVファイル読み込みの挙動について【Excel2003】 <CSVファイル例> "aaaa","bbb<改行コード 0d0A>bb","ccc" 上記のようなCSVファイルを、 ダブルクリックにてExcel起動すれば正常に表示されますが、 テキストファイルウィザード(データ→外部データ取り込み→データの取り込み) を使用して、読み込みを行うと改行されて表示されてしまいます。 これは、Excelの仕様なのでしょうか? ご存知の方いらっしゃいましたら教えていただけますでしょうか? 現在の本質的な問題は、 ------------------------------------------------------------------- Excel2003にて、文字コードがUTF-8のCSVファイルを下記方法にて読み込む ・テキストファイルウィザードを使用 ・文字コードをUTF-8 ・カンマ区切り設定 で読み込みを行うと文字化けしないで表示されるのですが ダブルコーテーション中のデータ内に改行コード0d0aが含まれると 改行されてしまいます。 ------------------------------------------------------------------- と言う現象の調査をしております。

    • 締切済み
    • PHP
  • CSV形式ファイルにある、カンマについて

    こんにちは。 現在、VB2005で、CSV形式のファイルを読むプログラムを 作っているのですが、CSV形式の1フィールドの中に カンマが入っているデータがあります。 フィールドの区切りのカンマではなく、文字としての カンマとして取り扱う場合は、そのカンマはどのように 変換すればいいのでしょうか? エスケープシーケンスという方法があるというところまでは わかったのですが、具体的にどのようにすればいいのかが わかりません。 よろしくお願いいたします。

  • Solaris上のC言語でCRLFのファイル作成は

    こんばんは。 Solarisの環境下で、 ファイルをオープン&編集&別ファイルを作成する処理において、 改行コードをCRLFにしたいと考えています。 プログラムはC言語で作成されています。 生成後のファイルは、文字コード:EUC、改行コード:LFで作成されています。 今回は、文字コード:SJIS、改行コード:CRLFで作成したいです。 現在、「\n」で、改行コードをLFとして作成しているようです。 この改行コードをCRLFにしたい、という意味です。 ファイルレコードの行末に「\n」を入れている処理の個所を、 「\r\n」に変更すれば、CRLFになるのでしょうか? プログラミング言語の仕様というよりは、 その実行モジュールが、どこのOS上で動くかに左右されるような気もしているのですが、どうでしょうか? よろしくお願いします。

  • ExcelのCSV形式について

    ExcelデータをCSV形式で保存するとき文字列はダブルコーテーション、数字列はそのままでカンマ区切りしたいです。確か123のCSV形式はそうなってたと思います。お手数ですが御回答、宜しくお願い致します。

  • CSVファイル読み込み、書き込み時の一般的な方法

    いつもお世話になります。 下記CSVデータの場合の分割された結果を示していますが、データを分割する際、一般的には、 どのような考え方で分割するロジックを組めばよいでしょうか。 CSVファイル読み込み、書き込み時におけるルール。 (間違っている、漏れているなどありましたらご指摘頂ければと思います。) ・ダブルコーテーションで括る必要のあるデータ  以下のデータを含むデータ。   区切り文字、改行、ダブルコーテーション ・ダブルコーテーションが入るデータは、ダブルコーテーションでエスケープする  aa"bb ⇒ aa""bb   上記ルールに則ったCSVファイルの読み込み方。  123,aaaaa,ああいい,"13,55","aa""bb","ab(改行)ZZ","ああ"",いい"   ↓  データ1 123  データ2 aaaaa  データ3 ああいい  データ4 13,55  データ5 aa"bb  データ6 ab(改行)ZZ  データ7 ああ",いい    上記結果になるようにデータを分割すればいいのですが、データにダブルコーテーションがある 場合、書き込み時に付与、読み込み時に削除、という具合にデータの編集処理が入ってしまうが いいのか、何かのミスで、ダブルコーテーションがエスケープされておらず、カンマと連続で 定義されていた場合「",」、データの終わりを示してしまい、意図しない個所で分割されてしまうの ではないか、何かのミスでダブルコーテーションの始め、もしくは終わりの定義が漏れいた場合 (「・・・,"aaaa,・・・」「・・・,aaaa",・・・」など)、これも意図しない個所で分割されてしまう、 などなど、一般的にはどのようなロジックにしておけばよいのでしょうか。 そもそもロジックで全てを防ぐ事はできない、ということでしたら、事前にこれだけは決めておくべき、 というポイントがありましたら、教えて頂けると嬉しいです。 世の中には、CSVファイルを分割するためのライブラリなどが公開されていますが、 外部のライブラリを使用してはいけないプロジェクトの場合など、自分で自作する必要があります。 その際の一般的な考え方、注意点などを踏まえて作ることができれば、無用なバグを含ませる ことができずにすむので、皆様の考えを教えて頂きたいと思い、質問した次第です。 宜しくお願いします。

    • ベストアンサー
    • Java
  • エクセルのカンマ区切りのCSV出力

    エクセルのカンマ区切りのCSV出力について質問します。 CSVファイルとしてカンマ区切りで出力したいのですが、さらに各項目にダブルコーテーション(")をつけて出力したいのです。 例) 通常のCSV 01,02,03 やりたいCSV出力 "01","02","03" ご存知の方がいらっしゃいましたら回答お願いします。

  • EXCEL VBAでのCSVファイルの編集

    CSVファイル(ダブルクォーテーション)形式のファイルをEXCEL VBAにて行の編集(削除)をした後、上書き保存をしたらダブルクォーテーション区切りではなくカンマ区切りのCSVファイルの形式になってしまいます。 ダブルクォーテーション区切りのCSVファイルで上書き保存する記述があれば教えて下さい。おそらくEXCELでCSV形式の上書きはCSV2の形式で保存されるみたいです。 困っています。どなたかお助け下さい。

  • エクセル2010 CSVレイアウト崩れ

    「よくある質問」とはちょっと違うと思います。 あるCSVファイルを、そのままダブルクリックするとエクセルで開いてくれるPCがあります。 そのようにして開くとレイアウト崩れはありません。 で、同じCSVファイルをエクセルの「データ」→「外部データの取り込み」→「テキストファイル」で読み込むと、レイアウトが崩れてしまうのはなぜでしょうか。 なぜこのような質問をするのかというと、ちょっと説明が難しいのですが、なるべく簡潔に箇条書きにしてみます。 1 まず、このCSVファイルは自社で使っているオリジナルのシステムがCSV形式で吐き出すファイルであるという事実 2 このファイルは、ところどころ長文があり、セル内で改行が必要。なので長文の部分はダブルクォーテーションで改行を含め全体を囲んである。 3 従来はCSVファイルをそのままダブルクリックして開いて、内容をチェックする時、担当者がエクセル上でセル幅や高さをマウスで調節して文章を読んでいた。なお、その際にレイアウト崩れは発生したことがないので、もともとのファイルのCSV形式はちゃんと整って吐き出されているものと思われる。 4 しかし、いちいち手動でそんなことをするのは大変だろうと、私がマクロでCSVファイルを読み取り、自動的にセル内の文章を全部表示できるサイズに各行や列を自動調節できるようにしたいと考えた。 5 具体的には、まずマクロを記録したエクセルファイルを開き、そこから次のシートに当該のCSVファイルを読み取らせればよかろうと考えた。 6 ところが、シートにCSVファイルを読み込ませるために冒頭のような読み込み作業を行ったら、同じエクセルの同じバージョン、同じPCなのにも関わらず、レイアウトに崩れが生じた。 7 具体的にどの部分でレイアウト崩れが起きているのかをテキストエディターで調べると、やはり長文内の改行部分で次のセルに移動してしまっている。 8 しかし、改行部はダブルクォーテーション内に収まっており、(そうでなかったらCSVファイルを直接ダブルクリックしてエクセルを開いた際にもレイアウト崩れが生じていたはず)自分でも訳がわからなくなる。 9 つまり、CSVファイルをテキストデータとして読み込んだ際、設定で「カンマでセル移動、ダブルクォーテーションを「文字列の引用符」に指定しているにも関わらず、エクセルがダブルクォーテーションを無視しているとしか考えられない 10 なぜこのような違いが同じエクセルで生じるのかがわからない 11 いろいろ調べると、「ひょっとして改行コードの解釈の問題(例のLF+CRの問題)か?もしくはダブルクォーテーションのコードの解釈の違いがあるのか??」と思い当たる。 …と、以上のような経緯があったわけです。 それにしても不可解な話なので、どなたかエクセルに詳しい方の解説がいただけたらなあ…と思うのですが、いかがでしょうか。 もしくはどこかに、「一発でCSVファイルを正しく読み込んでくれるモジュールがあるよ」的なアドバイスをいただけると非常に助かります。 よろしくお願いいたします。長文失礼いたしました。

  • Adodbの改行コードについて

    お世話になります。 クライアントにAccessが無いのでAccessモドキを作るのが目的で CSVを読み込み編集しCSVを書き出すhtaを作成しているのですがAdodbで躓いてしまいました。 読み込んだCSVの仕様に準拠して書き出すのですが、 どうしても改行コードが上手く出力出来ず悪戦苦闘中です。 WriteTextで行区切り文字を指定していますが 指定していないとLFが出力されており、 現在の指定でもCRLFの後にLFが吐き出されています。 LFが邪魔で仕方ないのですが必ず出力されてしまうものなのでしょうか? 回答お待ちしております。 CSVの仕様 ・UTF-8 ・セル内改行コード:LF ・行区切り:CRLF ・全セル「"」括り 書き込みデータ ・配列:textArray (「"」括り、「,」区切り済み、1要素1レコード) /* * @param file : ファイルフルパス * @param textArray : 書き込み配列 * return boolean : 成功判定(失敗時エラーコード) */ function adodbLineout(file, textArray){ try{ var adbStrm = new ActiveXObject("ADODB.Stream"); adbStrm.Charset = 'UTF-8'; adbStrm.lineSeparator = -1; for(i=0;i<textArray.length;i++){ if(textArray[i] == ""){continue;} adbStrm.WriteText(textArray[i], 1); } adbStrm.SaveToFile(file); adbStrm.Close(); return false; }catch(e){ return e; } } 因みに疑似システムはマクロで既に組み上げていたりするので 「Excelで作れ」など別システムの推奨はご遠慮下さいませ。 (読み込みファイルはそのExcelで作成しています。)

  • ACCESS「CSV」形式での、保存方法。

    ACCESSで作ったデータを「CSV形式(カンマ区切り)」で保存する方法がわかりません。 今日ACCESSに初挑戦しています。(ACCESS2000を使用) 色々調べて、データを「エクスポート」すればいいというところまでは、わかりました。 テキストデータにエクスポートしたのですが、 CSV(カンマ区切り)に変更する方法がわかりません。 よろしくお願いします。 -------------------------------------------------------- 強硬手段で、拡張子を「.csv」に変更してみたのですが、 だめでした。 データ内に、改行のあるHTMLが入っています。 拡張子を強制的に変更したら、 このHTMLタグが、消えてしまいました。 --------------------------------------------------------