CSVファイルの読込み(TextFieldParser)
CSVファイルの定義は
RFC Editor
http://www.rfc-editor.org/rfc/rfc4180.txt
に記述されています。
また、Excelで保存時にCSVファイルに指定し読み書きしてみるとカンタンに確認できます。
概要
1.行の区切りはCRLFでファイルの終端はCRLFを含まなくても良い。
2.フィールドの区切りは原則,(カンマ)で、
フィールドに,(カンマ)"(ダブルクォーツ)'(クォーツ)、又は制御文字(CRLF,CR,LF)が含まれる場合、又は両端のどちらかにスペースかTABを含む場合、フィールドは"(ダブルクォーツ)で括る。
但し、最初のフィールドの左端と最後のフィールドの右端には"(ダブルクォーツ)が無くても良い。
3.上記条件に該当しないフィールドは"(ダブルクォーツ)で括っても括らなくても良い。
→早い話がCSVで書き込む場合、フィールドは"(ダブルクォーツ)で括れば問題ない。
4.フィールドに"(ダブルクォーツ)を含む場合、直後に"(ダブルクォーツ)を追加する。
CSVを読込みする時はTextFieldParser オブジェクトを使用すると上記の条件を意識しないでコーディングできます。
VB.NET2005
TextFieldParser オブジェクトを使用します。
テストデータ(実行するにはC:\TEST.TXTに下記7行を複写して下さい。)
1,AAA,カンマ区切り
2,"BBB",ダブルクォーツで括られている
3,"CC,C",フィールド内にカンマが有る
4,"D""DD",フィールド内にダブルクォーツが有る
5,"""EEE""",フィールドの両端がダブルクォーツ
6,""FFF,フィールドの左端のダブルクォーツが解析不可
7,"GGG",a,b,フィールド構成が異なる
Imports Microsoft.VisualBasic.FileIO
Module Module1
Sub Main()
Using MyReader As New TextFieldParser("C:\test.txt" _
, System.Text.Encoding.GetEncoding("Shift_JIS")) '文字コードを指定する。
MyReader.TextFieldType = FieldType.Delimited
MyReader.SetDelimiters(",")
Dim oRow As String()
Dim i As Integer
While Not MyReader.EndOfData
Try
i += 1
Console.WriteLine("レコードNo." + i.ToString)
oRow = MyReader.ReadFields()
For Each oField As String In oRow
Console.WriteLine(oField)
Next
Console.Write(ControlChars.CrLf)
Catch ex As MalformedLineException
Console.WriteLine("Line " & ex.Message _
& ControlChars.CrLf & "レコードはそのまま出力されます。")
Console.WriteLine(MyReader.ErrorLine & ControlChars.CrLf)
End Try
End While
End Using
End Sub
End Module
実行結果
| レコードNo.1 1 AAA カンマ区切り レコードNo.2 2 BBB ダブルクォーツで括られている レコードNo.3 3 CC,C フィールド内にカンマが有る レコードNo.4 4 D"DD フィールド内にダブルクォーツが有る レコードNo.5 5 "EEE" フィールドの両端がダブルクォーツ レコードNo.6 Line 現在の区切り記号を使用して、行 6 を解析できません。 レコードはそのまま出力されます。 6,""FFF,フィールドの左端のダブルクォーツが解析不可 レコードNo.7 7 GGG a b フィールド構成が異なる |
お役に立てましたか?
IT、プログラミングのランキングサイトはこちらです。
最新記事の自動受信登録はこちらです。 |
![]() |
![]() |
![]() |
![]() |
| 固定リンク







コメント
分かりやすい例が提示してあり、とても助かりました
投稿: K | 2009年10月30日 (金) 14時27分