エクスポート (0) 印刷
すべて展開
展開 最小化

CSV ファイルの読み書き方法の違いについて

最終更新日 2005 年 6 月 9 日

Cc440858.download(ja-jp,MSDN.10).gif サンプル コードのダウンロード (vbmigtips_CSVFile.exe, 102 KB)

CSV 形式ファイルを使用してデータの保持を行ったり、データの管理を行いたい場合があると思います。そこで今回は、CSV 形式のファイル (図1) の読み込みと保存方法について紹介します。

 Cc440858.CSVFile_fig01(ja-jp,MSDN.10).gif
 図1

CSV 形式ファイルの読込
まず、CSV 形式ファイルを読み込む方法を紹介します。Visual Basic 6.0 では、シーケンシャル入力モードで CSV 形式のファイルを開いてデータを読み込みます。実装コードは以下のとおりです。

Dim strNo() As String
Dim strAddre() As String
Dim strNamae() As String
Private Sub Command1_Click()
Dim strTextLine As String
Dim strTxtDat As String
Dim lngCount As Long
FileName = "C:\sample.csv"
FileNo = FreeFile
Open FileName For Input As FileNo
lngCount = 0
Do Until EOF(FileNo)
lngCount = lngCount + 1
ReDim Preserve strNo(lngCount) As String
ReDim Preserve strNamae(lngCount) As String
ReDim Preserve strAddre(lngCount) As String
Input #FileNo, strNo(lngCount), strNamae(lngCount), strAddre(lngCount)
Me.List1.List(lngCount - 1) = strNo(lngCount) & "," & _
strNamae(lngCount) & "," & _
strAddre(lngCount)
Loop
Close #FileNo

Text1.Text = ""
Text2.Text = ""
Text3.Text = ""
End Sub

Private Sub List1_Click()
Dim index As Integer
index = List1.ListIndex + 1
Text1.Text = strNo(index)
Text2.Text = strNamae(index)
Text3.Text = strAddre(index)
End Sub
リスト1

上記 (リスト1) の「Open FileName For Input As FileNo」で、C ドライブの sample.csv ファイルをシーケンシャル入力モードで開き、「Input #FileNo, strNo(lngCount), strNamae(lngCount), strAddre(lngCount)」で sample.csv のデータを各変数に読み込みます。そして、「Me.List1.List(lngCount - 1) = strNo(lngCount) & "," & strNamae(lngCount) & "," & strAddre(lngCount)」で、ListBox に追加します。すべてのデータを読み込み、「Close #FileNo」で sample.csv ファイルを閉じます。「Private Sub List1_Click() ... End Sub」では、List1 内のデータを選択したとき、選択したデータを各テキストボックスに表示します。上記のコードを実装し、「読込」ボタンを選択すると図2 のように図1 の sample.csv のデータが List1 に読み込まれます。

 Cc440858.CSVFile_fig02(ja-jp,MSDN.10).gif
 図2

一方、Visual Basic .NET では、System.IO クラスを使用します。実装コードは以下のとおりです。

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
TextBox1.Clear()
TextBox2.Clear()
TextBox3.Clear()
Dim objFile As New System.IO.StreamReader("C:\sample.csv", System.Text.Encoding.Default)
Dim strLine As String
Dim strTemp() As String
Dim intCnt As Integer
Dim strData() As String
strLine = objFile.ReadLine()
While (strLine <> "")
Me.ListBox1.Items.Add(strLine)
strLine = objFile.ReadLine()
End While
objFile.Close()
End Sub

Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged
Dim strData As String
Dim strTemp() As String
Dim intCnt As Integer
strData = Me.ListBox1.SelectedItem
strTemp = Split(strData, ",")
For intCnt = 0 To UBound(strTemp)
Select Case intCnt
Case 0
TextBox1.Text = strTemp(intCnt)
Case 1
TextBox2.Text = strTemp(intCnt)
Case 2
TextBox3.Text = strTemp(intCnt)
End Select
Next
End Sub
リスト2

リスト2 の「Dim objFile As New System.IO.StreamReader("C:\sample.csv", System.Text.Encoding.Default)」で C ドライブの sample.csv ファイルを開き、「strLine = objFile.ReadLine()」で ファイルデータから 1 行分のデータを読み込みます。そして、「Me.ListBox1.Items.Add(strLine)」で読み込んだデータを ListBox1 に追加します。「objFile.Close()」で開いた sample.csv ファイルを閉じます。「Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged ... End Sub」では、List1 内のデータを選択したとき、選択したデータを各テキストボックス に表示します。「strData = Me.ListBox1.SelectedItem」で、選択した ListBox1 内のデータを取得し、「For intCnt = 0 To UBound(strTemp) ... Next」で取得したデータを各テキストボックスに表示します。リスト2 のコードを実装し、「読込」ボタンを選択すると図2 のように図1 の sample.csv のデータが ListBox1 に読み込まれます。

CSV 形式ファイルへの保存
続いて、図2 の各テキストボックスに入力されたデータを CSV 形式のファイルに保存する (書き込む) 方法を紹介します。Visual Basic 6.0 では、シーケンシャル書込みモードでファイルを開き、データを書き込みます。実装コードは以下のとおりです。

Dim FileName As String
Dim FileNo As Integer
Dim strData As String

Private Sub cmdSave_Click()
FileName = "C:\Sample.csv"
FileNo = FreeFile()
Open FileName For Output As #FileNo
Dim n As Integer
For n = 0 To List1.ListCount - 1
strData = strData & List1.List(n) & vbCrLf
Next
strData = strData & Text1 & "," & Text2 & "," & Text3
Print #FileNo, strData
Close #FileNo
End Sub

Private Sub Command2_Click()
Text1.Text = ""
Text2.Text = ""
Text3.Text = ""
End Sub
リスト3

リスト3 の「Open FileName For Output As #FileNo」で、C ドライブの sample.csv ファイルをシーケンシャル書き込みモードで開き、「Print #FileNo, strData」で sample.csv ファイルにデータを書き込みます。「Close #FileNo」で sample.csv ファイルを閉じます。リスト3 を実装し、各テキストボックスにデータを入力します (図3)。

 Cc440858.CSVFile_fig03(ja-jp,MSDN.10).gif
 図3

図3 で「保存」ボタンを選択すると、各テキストボックスのデータを保存します (図4)。

 Cc440858.CSVFile_fig04(ja-jp,MSDN.10).gif
 図4

一方、Visual Basic .NET では、System.IO クラスを使用します。実装コードは以下のとおりです。

Private Sub butSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
Dim n As Integer
Dim strData As String
strData = TextBox1.Text & "," & TextBox2.Text & "," & TextBox3.Text
Dim csvF As System.IO.FileStream = System.IO.File.OpenWrite("C:\sample.csv")
Dim csv As System.IO.StreamWriter = New System.IO.StreamWriter(csvF)
csv.BaseStream.Seek(0, System.IO.SeekOrigin.End)
csv.WriteLine(strData)
csv.Flush()
csv.Close()
csvF.Close()
End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
TextBox1.Clear()
TextBox2.Clear()
TextBox3.Clear()
End Sub
リスト4

リスト4 の「Dim csvF As System.IO.FileStream = System.IO.File.OpenWrite("C:\sample.csv")」で、C ドライブの sample.csv ファイルを書き込み用に開きます。「csv.BaseStream.Seek(0, System.IO.SeekOrigin.End)」で、sample.csv ファイルの現在の書き込み位置をファイルの最後に設定し、「csv.WriteLine(strData)」でデータを書き込みます。リスト4 を実装し、各テキストボックスにデータを入力 (図3) し、「保存」ボタンを選択すると、各テキストボックスのデータを保存します (図4)。

リスト2、リスト4 のように、Visual Basic .NET では System.IO クラスを使用して CSV 形式のファイルの読み込みや保存を行いましたが、ADO.NET を使用して CSV 形式のファイルの読み込みや保存を行うこともできます。

表示:
© 2014 Microsoft