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区切りのテキストファイル」の方が・・・
お礼
アドバイスありがとうございました。 早速、やってみます。