今回は、CSVファイルの内容をテキストボックスに取り込む(Visual Basic2005以降) の続きですよ。
さて、前回は、CSVファイルの内容をテキストボックスに表示するというものでした。
こんな感じです。
ファイルの内容をそのまま丸ごと取得するのは、結構簡単でしたよね。
それでは、今度は、一ひねりしてみます。
1行の中に、コンマで区切られた数字が7つあります。
この7つの数字の合計を各行の末尾に付け加えてみましょう。
以下が、完成イメージです。
今度は、ファイルの中身を一気に取得というわけには行きません。
STEP1:1行ずつ読み込んでは、
STEP2:合計を求めて、
STEP3:その行の末尾に追加
STEP4:その情報を変数の中に蓄積していく
という処理を最終行まで繰り返す必要があります。
前回のボタンクリック時のイベントプロシージャを変更しましょう。
以下のように修正してください。
Imports System.IO
Imports System.Text
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
With OpenFileDialog1
.Filter = "CSVファイル(*.csv)|*.csv"
If .ShowDialog = Windows.Forms.DialogResult.OK Then
TextBox1.Text = .FileName
Using sr As New StreamReader(.FileName, Encoding.Default)
'ファイルの内容を一気に取得して、テキストボックスに表示
'前回の課題
'Dim contents As String = sr.ReadToEnd()
'TextBox2.Text = contents
'1行の中の数字の合計を付加して出力(今回の課題)
'出力する内容を格納する変数
Dim Data As String = ""
Do
'最終行ならこのループを抜ける
If sr.EndOfStream Then Exit Do
'1行読み込み
Dim LineData As String = sr.ReadLine()
'コンマごとに文字列を分割し、配列変数に格納
Dim values() As String = Split(LineData, ",")
Dim ans As Integer = 0
'配列変数valuesのすべての数字を数値に変換して足し算する
For i As Integer = 0 To values.Length - 1
ans += Integer.Parse(values(i))
Next
'1行データに、合計値を付加して変数に格納
Data &= LineData & " → total: " & ans & vbNewLine
Loop
'出力する(変数Dataの内容をテキストボックスに表示)
TextBox2.Text = Data
End Using
End If
End With
End Sub
End Class
画像も載せておきます。
赤枠の中を入力してください。その前の2行は、コメントアウトしてください。
ファイルの内容を1行ずつ読み込むには、ReadLineメソッドを使います。
このメソッドは、自動的に次の行を読み込んでいきます。
Splitメソッドを使うと、カンマごとに区切って配列変数の中に値を格納します。
この配列の中の値を足し算すれば、その行の合計が出るわけです。
ans += Integer.Parse(values(i))
は、
ans = ans + Integer.Parse(values(i))
と同じ意味です。
Data &= LineData & " → total: " & ans & vbNewLine
は、
Data = Data & LineData & " → total: " & ans & vbNewLine
と同じ意味です。
実行すると、以下のようになりますよ。
それでは、今日も楽しい一日を。
だい