タグ
  ANSI (1)
  ASP.NET (10)
  Active Directory (55)
  BAT (16)
  Backup (2)
  CSharp (11)
  CentOS (4)
  C言語 (4)
  DNS (4)
  Excel (2)
  FFmpeg (1)
  Fedora (4)
  FreeBSD (6)
  IPv6 (3)
  Java (11)
  JavaScript (8)
  LAN (1)
  Link (4)
  Linux (15)
  Mac (1)
  Mail (2)
  Microsoft (3)
  NIS (1)
  Node.js (6)
  OpenIndiana (1)
  OpenLDAP (2)
  OpenSSL (1)
  OpenSolaris (4)
  PHP (2)
  Perl (2)
  Postfix (1)
  PostgreSQL (2)
  PowerShell (34)
  RFC (3)
  SQL Server (5)
  Solaris (10)
  Ubuntu (9)
  VBScript (73)
  VCpp (2)
  VMware (3)
  Visual Basic (1)
  WMI (17)
  WSF (5)
  WSH (10)
  Windows (19)
  bash (1)
  bind (1)
  iSCSI (1)
  作成中 (8)
  慣用句 (3)
  正規表現 (6)
  運用 (8)
作成 2010.01.07
更新 2010.01.07
CSVフォーマット
CSVファイルに入っている可能性のあるパターンです。
目次
RFC4180準拠
基本
ヘッダーはあってもなくてもよい
空データフィールドがある
前後にスペースがあっても無視しない
ダブルクォーテーションで囲む場合は同じレコードのすべてのフィールドをダブルクォーテーションで囲む
改行、ダブルクォーテーション、カンマを含むフィールドは、ダブルクォーテーションで囲むべき
ダブルクォーテーションで囲まれているフィールドでダブルクォーテーションを使用する場合は、ダブルクォーテーションでエスケープする
非常に長い文字列を考慮
複合パターン
RFC4180非準拠
カンマで終わる
(RFC未言及)ダブルクォーテーションで囲まれているフィールドの前後に空白がある
フィールド数が異なる
ダブルクォーテーションで囲まれているフィールドと囲まれていないフィールドが混在する
ダブルクォーテーションのエスケープが崩れている
(RFC想定外)カンマ(0x2c)に相当する文字が存在する
複合パターン
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 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
[リロード] [記事修正] [新規作成] [使用方法]
©2004-2012 UPKEN IPv4