§10 計算(3)2 | プログラミング実習 |
【3】 データの取り出し手順
変換されたデータは、変数motoに次のように1つの文字列データとして記憶されている。
"1,2,3,4,5,6,7,8,9,10,"
このデータを1つ1つのデータに分ける必要がある。その処理手順を次に示す。
以上、データがなくなるまで繰り返す。
トレース(moto=1,2,3,4,5,6,7,8,9,10," の場合)
回数 pt=InStr(moto,",") d=Val(Mid(moto,1,pt-1)) moto=Mid(moto,pt + 1) 1 2 1 "2,3,4,5,6,7,8,9,10," 2 2 2 "3,4,5,6,7,8,9,10," 3 2 3 "4,5,6,7,8,9,10," … … … … 8 2 8 "9,10," 9 2 9 "10," 10 2 10 ""
操作 9 カンマで区切られたテータを1つずつ分ける。[計算](KeisanButton)のメソッドを次の太字のように追加・修正する。
Private Sub Button1_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles KeisanButton.Click
Dim moto As String, pt As Integer, d As Integer
moto = Data1.Text & ","
'データの最後にカンマを追加
pt = 1 '検索開始位置(1文字目)
Do '永久ループ
pt = InStr(pt, moto, vbCrLf)
'改行文字(VbCrLf)を検索
If pt = 0 Then
'改行文字なし
Exit Do
'ループを抜ける
End If
If Mid(moto, pt - 1, 1) = ","
Then '改行文字の直前がカンマ
moto = Mid(moto,
1, pt - 1) & Mid(moto, pt + 2) '改行文字削除
Else
moto = Mid(moto,
1, pt - 1) & "," & Mid(moto, pt + 2) '連結
End If
Loop
Do Until Len(moto) = 0
pt = InStr(moto, ",") 'カンマを検索
d = Val(Mid(moto, 1, pt - 1)) '先頭からカンマ直前まで
MsgBox(d) '確認用
moto = Mid(moto, pt + 1) 'カンマ直後をmotoに
MsgBox(moto) '確認用
Loop
End Sub
Bのように入力して[計算]ボタンをクリックすると、メッセージボックスに取り出したデータ、残りのデータの順に繰り返し表示される。
「1」→「2,3,4,5,6,7,8,9,10,」→「2」→「3,4,5,6,7,8,9,10,」→「3」→「4,5,6,7,8,9,10,」→「4」→「5,6,7,8,9,10,」→「5」→「6,7,8,9,10,」→「6」→「7,8,9,10,」→「7」→「8,9,10,」→「8」→「9,10,」→「9」→「10,」→「10」→「なし」
以上で@、A、Bのどのような入力方法にも対応できるようになった。
ここで、使われている命令・関数などについて簡単にまとめておく。
Len(文字列 ) Microsoft.VisualBasic.Len() 文字列 の長さ(文字数)を返却する。
Do Until 条件式 〜 Loop Do 〜 Loop Until 条件式 条件式 が真になるまで繰り返す。条件式 が真になったらループを終える。
(参考)
Do While 条件式 〜 Loop Do 〜 Loop While 条件式 条件式 が真の間、繰り返す。条件式 が偽になったらループを終える。
【4】 合計計算
カンマで区切られたデータは、変数dに取り出されていく。このデータを加算(累算)していき、合計を計算させる。
操作 10 合計計算をする。[計算](KeisanButton)のメソッドを次の下線部のように追加・修正する。2カ所の確認用の命令は削除する。
Private Sub Button1_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles KeisanButton.Click
Dim moto As String, pt As Integer, d As Integer
Dim goukei As Integer
moto = Data1.Text & ","
'データの最後にカンマを追加
pt = 1 '検索開始位置(1文字目)
goukei = 0 '合計用
Do '永久ループ
pt = InStr(pt, moto, vbCrLf)
'改行文字(VbCrLf)を検索
If pt = 0 Then
'改行文字なし
Exit Do
'ループを抜ける
End If
If Mid(moto, pt - 1, 1) = ","
Then '改行文字の直前がカンマ
moto = Mid(moto,
1, pt - 1) & Mid(moto, pt + 2) '改行文字削除
Else
moto = Mid(moto,
1, pt - 1) & "," & Mid(moto, pt + 2) '連結
End If
Loop
Do Until Len(moto) = 0
pt = InStr(moto, ",")
'カンマを検索
d = Val(Mid(moto, 1, pt - 1))
'先頭からカンマ直前まで
MsgBox(d) '確認用
moto = Mid(moto, pt + 1)
'カンマ直後をmotoに
MsgBox(moto) '確認用
goukei = goukei + d '合計計算
Loop
Kotae.Text = goukei '合計表示
End Sub
1〜10のデータを@、A、Bいずれかの方法で入力して、[計算]ボタンをクリックすると計算結果の欄に"55"と表示される。
操作 11 [終了](EndButton)のクリックイベントに対応するメソッドを作成する。
【カンマ区切りのデータ形式】
データをカンマ(,)で区切ったデータ形式は、「CSV(Comma Separated Values)」形式と呼ばれる。表計算などの保存形式としても使われている。実態はテキストデータであるのでほかのアプリケーションとのデータ交換などにも使われる。
VBには、区切られたデータを取り出すのに、split関数がある。
Dim a(3) As String
a = Split("1,2,3,4", ",")
実行結果は、a(0)="1",a(1)="2",a(2)="3",a(3)="4"となる。詳しくは、ヘルプ参照のこと。
【5】 平均計算
平均は、合計をデータの個数でわり算したものである。すでに合計は計算できているので、あとはデータの個数がわかればよい。
個数をカウントする変数cntを用意して、データを取り出すごとに1ずつ加算していけばデータの個数を調べることができる。
操作 12 平均の計算結果を表示する欄を図のように追加する。合計のラベルのメッセージも変更しているので修正する。
@ ラベル (Name) → Label3、 Text → 平均= A テキストボックス (Name) → Kotae2、 Text → 0
操作 13 平均計算をする。[計算](KeisanButton)のメソッドを次のように追加・修正する。
Private Sub Button1_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles KeisanButton.Click
Dim moto As String, pt As Integer, d As Integer
Dim goukei As Integer, cnt As Integer
moto = Data1.Text & ","
'データの最後にカンマを追加
pt = 1 '検索開始位置(1文字目)
goukei = 0 '合計用
Do '永久ループ
pt = InStr(pt, moto, vbCrLf)
'改行文字(VbCrLf)を検索
If pt = 0 Then
'改行文字なし
Exit Do
'ループを抜ける
End If
If Mid(moto, pt - 1, 1) = ","
Then '改行文字の直前がカンマ
moto = Mid(moto,
1, pt - 1) & Mid(moto, pt + 2) '改行文字削除
Else
moto = Mid(moto,
1, pt - 1) & "," & Mid(moto, pt + 2) '連結
End If
Loop
cnt = 0 'データ個数用
Do Until Len(moto) = 0
pt = InStr(moto, ",")
'カンマを検索
d = Val(Mid(moto, 1, pt - 1))
'先頭からカンマ直前まで
moto = Mid(moto, pt + 1)
'カンマ直後をmotoに
goukei = goukei + d
'合計計算
cnt = cnt + 1 'データ個数カウント
Loop
Kotae.Text = goukei '合計表示
Kotae2.Text = goukei / cnt '平均表示
End Sub
1〜10のデータを@、A、Bいずれかの方法で入力して、[計算]ボタンをクリックすると合計の欄に"55"、平均の欄に"5.5"と表示される。
§10 計算(3)2 | Copyright©2008 Hiroshi Masuda |