最速怪談選手権

VB6.0で改行コードが無く、半角と全角文字が入り混じっているファイルの読み取り方法を教えて下さい。

通常の一行読み込みの範囲を大幅に超えている文字列です。

他のサイトで以下のようなプログラム(20バイトずつ切り取って読む)を見つけたのですが、

Dim InFileNo As Integer
Dim Buf As string * 10
Dim LINE As Long

InFileNo = FreeFile
Open "C:\test.txt" For Random As #InFileNo Len = 20

LINE = 1
Do Until EOF(InFileNo)
Get #InFileNo, LINE, buf
LINE = LINE + 1
Loop

これだと、半角と全角が混じっている箇所で文字化けを起こしてしまいます。

以上です。よろしくお願い致します。

A 回答 (3件)

文字数指定の読み込みはInput(文字数,ファイル番号)という文を


使います。但し、EOFを超えるとエラーになるので、TextStreamの
方が楽かも知れません。以下はその例です。

Dim FSO, Txs
Dim Buf As String
Dim LINE As Long

Set FSO = CreateObject("Scripting.FileSystemObject")
Set Txs = FSO.OpenTextFile("C:\test.txt", 1) '1 は入力モード
Do Until Txs.AtEndOfStream
    LINE = LINE + 1
    Buf = Txs.Read(20) '20文字という意味
Loop
Txs.Close

Readメソッドは残りが20文字未満の場合、エラーにならず、残りの
文字列を返します。Input文では残りが指定文字数未満だとエラーに
なります。但し、EOF検出後にReadメソッドを実行すると、さすがに
エラーになります。
    • good
    • 0

それは、20バイト固定にしたらおかしくなりますよね。


横着しないで、頭から文字コードを1文字ずつ抜き出して、
半角文字と全角1バイト目の文字(0x80~0x9Fと0xE0~0xFC)と2バイト目の文字を判定するべきです。
その他にヌル0x00や改行コードなどの制御文字コードをどうするかの処理も必要です。

それで、20バイト目が全角1バイト目の文字コードになるなら、
その文字はキャンセルして、頭から19文字だけ使用します。
次の読み込みでは、前回の最後の文字+次に読み込んだ20文字にして
また、頭から見ていきます。
    • good
    • 0

どの程度の大きさのファイルなのでしょう?



Binaryモードで読み込んでStrConvなどで文字列に変換
なんて方法もありますよ

Dim arBin() as byte, ss as String
Open "C:\Test.txt" For Binary Access as #1
Redim arBin( LOF(1)-1 )
Get #1,, arBin
Close #1

ss = strConv(arBin, vbUnicode)
といった具合です
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!