前提・実現したいこと
お世話になります。
VB.NETを使用しています。
ご回答、アドバイスの程宜しくお願い致します。
以下実現したい内容です。
テキストファイルを1行ずつ読み出し、読みだした文字列がある条件を満たしていれば
その文字列を処理し、処理結果を配列に格納する。
条件を満たしていない行はスルー。ファイル内全ての行を読み出したら終了する。
現状、ネットで検索したら1行ずつ読み取るプログラムをサイトに掲載して下さっている
方がいたので、それを参考に組んでいる。
発生している問題・エラーメッセージ
DBG用最後結果を表示させているが、その結果の値が00となり、表示するはずの値と異なる。
読み出すテキストファイルの中身は以下のような感じ(例)
xyz abcde:xxxx 0012500000300 abcde:xxxx 0012500001000 abcde:xxxx 0030000000300 xyz abcde:xxxx 0012500000300
上記のような文字列の中で:xxxxが入ってる行だけ処理→結果格納
行数は不定。
該当のソースコード
VBNET
1Imports System.IO 2Imports System.Text 3 4 5Public Class Form5 6 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 7 8 9 Dim FilePath As String = TextBox1.Text 'textbox1に入力されたパス内にあるtxtファイルを読み出す 10 Dim ExtensionName As String 11 Dim RLine As String 12 Dim str As String = String.Empty 13 Dim rd(1000) As Single '最終的に欲しい処理結果 14 Dim n As Integer 15 Dim aaa, bbb, ccc As String 16 17 18 n = 0 19 20 Try 21 22 ExtensionName = Path.GetExtension(FilePath) 23 24 If ExtensionName = ".txt" Then 25 26 Using sr As New StreamReader(FilePath, Encoding.GetEncoding("Shift_JIS")) 27 28 RLine = sr.ReadLine() 29 30 Do While RLine IsNot Nothing 31 32 str &= RLine & ControlChars.NewLine 33 34 RLine = sr.ReadLine() 35 36 If InStr(str, "xxxx") > 0 Then '読みだした文字列の中にxxxxという文字列があった場合以下の処理を行う 37 aaa = Mid(str, InStrRev(str, "xxxx") + 6) 'xxxxという文字を基準にして~所望の部分を切り取り 38 bbb = aaa.Substring(0, 8) '文字列のセパレート 39 ccc = aaa.Substring(8, 5) '文字列のセパレート 40 rd(n) = Convert.ToInt32(ccc / 16) / Convert.ToInt32(bbb / 16) '変換&計算処理 41 rd(n) = Math.Round(rd(n), MidpointRounding.AwayFromZero) '桁丸め 42 n = n + 1 'nカウントアップし次へ 43 Else 44 45 End If 46 47 Loop 48 49 End Using 50 51 End If 52 53 Catch ex As IO.FileNotFoundException 54 55 MsgBox("ファイルが見つかりません。") 56 57 Catch ex As Exception 58 MsgBox(Err.Description) 59 60 61 End Try 62 63 TextBox2.Text = rd(1) 'DBG用に最後テキストボックスにrd(1)を表示させている 64 65 66 67 End Sub 68 69End Class
DBG というのはドラゴンボールの新作ですか?
デバッガを使ってステップ実行しながら変数の中身をチェックするなどしてみましたか?