« CSVファイルの保存(書き込み) | トップページ | 事務処理に最適化されたCOBOL 冗長化 »

2007年5月27日 (日)

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、プログラミングのランキングサイトはこちらです。

にほんブログ村 IT技術ブログへ 人気blogランキングへ FC2 Blog Rankingへ


最新記事の自動受信登録はこちらです。

はてなRSSに追加

livedoor Readerに追加
My Yahoo!に追加
Googleに追加
goo RSSリーダーに追加

|

« CSVファイルの保存(書き込み) | トップページ | 事務処理に最適化されたCOBOL 冗長化 »

コメント

分かりやすい例が提示してあり、とても助かりましたhappy02

投稿: K | 2009年10月30日 (金) 14時27分

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/279803/6569659

この記事へのトラックバック一覧です: CSVファイルの読込み(TextFieldParser):

« CSVファイルの保存(書き込み) | トップページ | 事務処理に最適化されたCOBOL 冗長化 »