ファイルから指定位置の1文字を読み込むには?(VB2008)
D:\Temp\ForGrep.txt
Ah Love! could you and I with Fate conspire
To grasp this sorry Scheme of Things entere,
Would not we shatter it to bits -- and then
Re-mould it nearer to the heart's Desire!
このようなファイルを読み込んで出力する演習をしています。
' ==============================
' 全ての行を読み込んで出力する
' ==============================
Module theGrap
Sub Main()
Dim iNow As Integer = 0
Dim iNext As Integer = 0
Do
iNow = iNext
Debug.Print(ReadLine("D:\Temp\ForGrep.txt", iNow, iNext))
Loop Until iNext = -1
End Sub
End Module
ReadLine 関数でファイルの先頭0バイト目から1行を読み込む。
ReadLine 関数は、次の行が存在する可能性があれば次の行の開始バイトを iNext に代入。
ReadLine 関数は、次の行が存在しなければ iNext には -1 を代入。
聞きたいのは、あるポジションから1文字づつ行末まで読み込む方法です。
' ----------------------------------------
' ファイルから指定位置の1文字を読み込む
' ----------------------------------------
Private Function GetString(ByVal fs As FileStream, _
ByVal iPP As Integer) As String
Dim c As String = ""
Dim d As String = ""
Dim Buf(1) As Byte
Dim ec As Encoding = Encoding.Default
' --------------------------------
' 指定の位置より2バイト読み込む
' --------------------------------
fs.Seek(iPP, SeekOrigin.Begin)
fs.Read(Buf, 0, Buf.Length)
c = ec.GetString(Buf)
' ----------------------------------------------
' 指定の位置より1バイト戻って2バイト読み込む
' ----------------------------------------------
If iPP > 0 Then
fs.Seek(iPP - 1, SeekOrigin.Begin)
fs.Read(Buf, 0, Buf.Length)
d = ec.GetString(Buf)
End If
Return If(d.Length = 1, d, c.Substring(0, 1))
End Function
今、私は、このように非常にややこしい手順で1文字づつ読み込んでいます。
なんか、とんでもない無駄なことをしているような気がします。
多分、同じことが1行で出来るんではないかと思います。
「そんなややこしいことをしなくて、このようなやり方で」を教えて下さい。
お礼
maku_xさん、書込ありがとうございます。 書き込みいただいた、実例のご説明を何度か読み返し理解する事ができました。バイト目というのもスクリプトなどでの1からではなく0はじまる事を指していたのですね。 大変助かりました。 ありがとうございました。