作成 2010.01.07
更新 2010.01.07
更新 2010.01.07
CSVフォーマット
CSVファイルに入っている可能性のあるパターンです。
目次
RFC4180準拠
基本
フィールドはカンマで区切る。
改行は CRLF、LF、CR のいずれの可能性もある。
ファイル末尾に改行コードがある場合とない場合がある。
aaa,bbb,ccc
aaa | bbb | ccc |
ヘッダーはあってもなくてもよい
field_1,field_2,field_3 aaa,bbb,ccc
field_1 | field_2 | field_3 |
aaa | bbb | ccc |
空データフィールドがある
aaa,,ccc
aaa | ccc |
前後にスペースがあっても無視しない
aaa, bbb , ccc
aaa | bbb | ccc |
ダブルクォーテーションで囲む場合は同じレコードのすべてのフィールドをダブルクォーテーションで囲む
"aaa","bbb","ccc" zzz,yyy,xxx
aaa | bbb | ccc |
zzz | yyy | xxx |
改行、ダブルクォーテーション、カンマを含むフィールドは、ダブルクォーテーションで囲むべき
"aaa","bb b","ccc" "aaa","bb,b","ccc"
aaa |
bb b |
ccc |
aaa | bb,b | ccc |
ダブルクォーテーションで囲まれているフィールドでダブルクォーテーションを使用する場合は、ダブルクォーテーションでエスケープする
"aaa","bb""b","ccc" aaa,bb"b,ccc
aaa | bb"b | ccc |
aaa | bb"b | ccc |
非常に長い文字列を考慮
"abcdefghi1abcdefghi2abcdefghi3abcdefghi4abcdefghi5abcdefghi6abcdefghi7abcdefghi8abcdefghi9abcdefghi0 abcdefghi1abcdefghi2abcdefghi3abcdefghi4abcdefghi5abcdefghi6abcdefghi7abcdefghi8abcdefghi9abcdefghi0 abcdefghi1abcdefghi2abcdefghi3abcdefghi4abcdefghi5abcdefghi6abcdefghi7abcdefghi8abcdefghi9","bbb","ccc"
abcdefghi1abcdefghi2abcdefghi3abcdefghi4abcdefghi5abcdefghi6abcdefghi7abcdefghi8abcdefghi9abcdefghi0 abcdefghi1abcdefghi2abcdefghi3abcdefghi4abcdefghi5abcdefghi6abcdefghi7abcdefghi8abcdefghi9abcdefghi0 abcdefghi1abcdefghi2abcdefghi3abcdefghi4abcdefghi5abcdefghi6abcdefghi7abcdefghi8abcdefghi9 |
bbb | ccc |
複合パターン
"aaa","bb""b","cc k c" aaa,bb"b,ccc "aaa","bb,b","ccc"""
aaa | bb"b |
cc k c |
aaa | bb"b | ccc |
aaa | bb,b | ccc" |
RFC4180非準拠
本来であれば例外を返すべきです。
カンマで終わる
aaa,bbb,
aaa | bbb |
(RFC未言及)ダブルクォーテーションで囲まれているフィールドの前後に空白がある
"zzz ", "yyy " , " xxx "
zzz | "yyy " | " xxx " |
フィールド数が異なる
field_1,field_2,field_3 aaa,bbb aaa,bbb,ccc aaa,bbb,ccc,ddd
field_1 | field_2 | field_3 | (4) |
aaa | bbb | ||
aaa | bbb | ccc | |
aaa | bbb | ccc | ddd |
ダブルクォーテーションで囲まれているフィールドと囲まれていないフィールドが混在する
aaa,"bbb",ccc "xxx",yyy,"zzz"
aaa | bbb | ccc |
zzz | yyy | xxx |
ダブルクォーテーションのエスケープが崩れている
正直こんな風に処理してよいものか判断に苦しむ。
"aaa","bb" "b","ccc"
aaa | bb "b" | ccc |
(RFC想定外)カンマ(0x2c)に相当する文字が存在する
JISとUTF-16は使用しないほうが無難ですね。
Char Code,Char,Code JIS,↑,0x222c JIS,,0x232C JIS,が,0x242c JIS,ガ,0x252c JIS,Μ(大文字のミュー),0x262c JIS,К(大文字のカー),0x272c JIS,━(罫線),0x282c JIS,階,0x332c JIS,巻,0x342c JIS,ほか多数,--- UTF-16,∬,0x222c UTF-16,L,0xff2c UTF-16,Ь(キリル文字の大文字の軟音符),0x042c UTF-16,┬,0x252c UTF-16,ほか多数,---
Char Code | Char | Code |
JIS | ↑ | 0x222c |
JIS | が | 0x242c |
JIS | ガ | 0x252c |
JIS | Μ(大文字のミュー) | 0x262c |
JIS | К(大文字のカー) | 0x272c |
JIS | ━(罫線) | 0x282c |
JIS | 階 | 0x332c |
JIS | 巻 | 0x342c |
JIS | ほか多数 | --- |
UTF-16 | ∬ | 0x222c |
UTF-16 | L | 0xff2c |
UTF-16 | Ь(キリル文字の大文字の軟音符) | 0x042c |
UTF-16 | ┬ | 0x252c |
UTF-16 | ほか多数 | --- |
複合パターン
field_1,field_2,field_3 "aaa", "bbb " aaa,bb"b,"c""cc", aaa,"b bb",ccc,ddd
field_1 | field_2 | field_3 | (4) |
aaa | "bbb " | ||
aaa | bb"b | c"cc | |
aaa |
b bb |
ccc | ddd |
タグ: RFC