' ==========================================
' 全ての行を読み込んで "" 行以外を出力する
' ==========================================
Module theGrap
Sub Main()
Dim iNow As Integer = 0
Dim iNext As Integer = 0
Dim aLine As String = ""
Do
iNow = iNext
aLine = FGets("D:\Temp\Test4.txt", iNow, iNext)
If aLine = "" Then Continue Do
Debug.Print(aLine)
Loop Until iNext = -1
End Sub
End Module
[イミディエイト ウインドウ]
123あいうえお90
123かきくけこ90
123さしすせそ90
と、成功しています。
' --------------
' 行末まで読む
' --------------
Do
fs.Seek(iNowPosition, SeekOrigin.Begin)
fs.Read(aBuf, 0, 2)
aChar = ec.GetString(aBuf).Substring(0, 1)
If aChar <> Chr(13) Then
aChars &= aChar
Else
iNowPosition = iNowPosition - 1
Exit Do
End If
iNowPosition += txt.LenB(aChar)
Loop While iNowPosition < fs.Length And (aChar <> Chr(13) Or aChar <> Chr(10))
しかし、実は、FGets 関数では1文字づつ読み込んでいます。
そこで、StreamReader で一行を読み込むように修正。
[イミディエイト ウインドウ]
123?????90
123?????90
123?????90
すると見事に化けてしまいました。
化けること自体は理解できるのですが、化けを修正する術がわかりません。
Function FGetl(ByVal aFile As String, _
ByVal iNowPosition As Integer, _
ByRef iNextPosition As Integer) As String
Dim aBuf(1) As Byte
Dim aChars As String = ""
iNextPosition = -1
If File.Exists(aFile) Then
Try
Using fs As FileStream = New FileStream(aFile, FileMode.Open, FileAccess.Read)
Dim sr As StreamReader
Dim ec As Encoding = Encoding.Default
fs.Seek(iNowPosition, SeekOrigin.Begin)
sr = New StreamReader(fs)
aChars = sr.ReadLine
iNowPosition += txt.LenB(aChars)
iNextPosition = NextPosition(fs, iNowPosition)
fs.Close()
Return aChars
End Using
Catch ex As IOException
MsgBox(ex.Message & "(FGets)", MsgBoxStyle.Exclamation, "エラー:")
Return ""
End Try
Else
Return ""
End If
End Function
文字の化けを修正する方法を教えて頂ければ幸いです。
お礼
ばっちりとできました。 1月26日に初めて VB.Net を知りました。 ですから、未だ、Sub Main() での基本事項の初確認に終始しています。 そして、この60日余りの最大の疑問が今回の質問でした。 本当にありがとうございました。