プロが教える店舗&オフィスのセキュリティ対策術

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

A 回答 (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区切りのテキストファイル」の方が・・・
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/11/25 13:00

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!