ファイルを1行読みだすと、早速何かの処理が必要になる。それが、個別データの分離だ。ファイルが作成されたのと全く同じ考えで、読み込むならば、区切りのデリミッタは同じで良いのであまり苦労はしない。所が、今回のログファイルの様に、使い方をこちらで勝手に決める場合は、データの切り出しに工夫が必要になる。
今回紹介するルーチンは、デリミッタをその都度指定するので、そんな時に便利だと思う。もっとスマートで効率の良いルーチンを考えてくれると、うれしいですけどね。コメント投稿を期待したい。
まず、文字位置を指定するポインターを定義する。
Public iBegin As Integer '切り出しの文字位置
使い方は、こうだ。
fileno = FreeFile()
FileOpen(fileno, filename, OpenMode.Input)
i = 0
Do Until EOF(fileno)
recbuff = LineInput(fileno)
iBegin = 1
x1 = fn_get(recbuff, Chr(9))
x2 = fn_get(recbuff, " ")
x3 = .........
Loop
FileClose(fileno)
で、そのfn_get() とは、
Public Function fn_get(ByRef x1 As String, x2 As String) As String ' 文字の切り出し
'x1は、対象文字、x2は、デリミッタ、iBeginは、文字位置であらかじめセット
Dim n1 As Short
If Mid(x1, iBegin, Len(x2)) = x2 Then
fn_get = ""
iBegin = iBegin + Len(x2)
Else
n1 = InStr(iBegin, x1, x2)
If n1 = 0 Then
fn_get = Mid(x1, iBegin, Len(x1) - iBegin)
iBegin = Len(x1) + 1
Else
fn_get = Mid(x1, iBegin, n1 - iBegin)
iBegin = n1 + Len(x2)
End If
End If
End Function
余計なお世話だが、変数の格納を
① Dim dt_data as New ArrayList とするのか、
② Dim dt_data() as String とするのか、
なかなかこれと言った決めての結論が出せずにいる。取りあえずは、大方は②で実現している。