• 締切済み

TAB区切りのCSVデータ読込

TAB区切りのCSVデータを読み込む方法を教えて下さい。 言語は、VB2005です。 (できればサンプルソースで説明して頂ければありがたいです。)

みんなの回答

回答No.1

vb2005に限らず.netは浅い知識(触っているが仕事と言うわけではない)なんですが・・・ お手軽にやるなら、全部読み込んで、crlfとtabで分解してあげる。 Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim sr As New System.IO.StreamReader("C:\test.txt") Dim line() As String = Split(sr.ReadToEnd(), vbCrLf) 'line()に改行区切りで読み込み For row As Integer = 0 To UBound(line) Dim field() As String = Split(line(row), vbTab) 'field()にタブ区切りで読み込み '以下field(col)で各種処理 For col As Integer = 0 To UBound(field) Debug.Print(row & "-" & col & "=" & field(col)) Next Next sr.Close() sr = Nothing End Sub End Class というのはどうでしょう? Dim sr As New System.IO.StreamReader("C:\test.txt", System.Text.Encoding.GetEncoding("Shift_JIS")) とかすると、いろんなコードが読めます。 でもせっかくvb2005ならTextFieldParserなんかはどうでしょう? それと、vb2005から使えるUsingも2005以前のvbユーザはもちろん、vb6系からの人は助かるかも・・・ Imports Microsoft.VisualBasic.FileIO 'TextFieldParser使う時は必要 Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Using parser As New TextFieldParser("c:\test.txt") parser.TextFieldType = FieldType.Delimited 'フィールド区切りあり parser.SetDelimiters(vbTab) 'フィールド区切りはタブ Dim row As Integer = 0 Do While Not parser.EndOfData Dim field As String() = parser.ReadFields() ' 1行読み込み '以下field(col)で各種処理 For col As Integer = 0 To UBound(field) Debug.Print(row & "-" & col & "=" & field(col)) Next row = row + 1 Loop End Using End Sub End Class というのはどうでしょう? これを使うメリットは、"aaa"とか"abc[tab]def"とか、""を"に変換するとかをしてくれます。 (場合によっては余計なお世話と言う事もありますが・・・) ちなみに、 Dim parser As New TextFieldParser("text.csv", System.Text.Encoding.GetEncoding("Shift_JIS")) とかすると、いろんなコードが読めます。 using~end usingは、今まで new (dim new や set ??=new)で宣言した場合、最後にdispose(close)してあげないといけなかったのが、不要になるそうです。 特にエラー処理なんかがある場合に便利そうです。 vb6やvbaからの人は、忘れがちなdispose(close)の心配がなくなりそうです。 最初の Dim sr As New System.IO.StreamReader("C:\test.txt") も using sr As New System.IO.StreamReader("C:\test.txt") にして、 sr.Close() sr = Nothing を end using にできます。 以前からですが、.net系になってからの変数の宣言と初期化が一緒にできるのもありがたかった・・・ p.s. 浅い知識なので、間違っていたら、誰か指摘してください。 独り言 csvは Comma Separated Valuesのことだから、tab区切りの場合は「tab区切りのテキストファイル」の方が・・・

taka_1
質問者

お礼

アドバイスありがとうございました。 早速、やってみます。

関連するQ&A

専門家に質問してみよう