• ベストアンサー

VB6.0 改行コードのないファイルの読み込み

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 これだと、半角と全角が混じっている箇所で文字化けを起こしてしまいます。 以上です。よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • nda23
  • ベストアンサー率54% (777/1416)
回答No.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メソッドを実行すると、さすがに エラーになります。

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • yama1718
  • ベストアンサー率41% (670/1618)
回答No.2

それは、20バイト固定にしたらおかしくなりますよね。 横着しないで、頭から文字コードを1文字ずつ抜き出して、 半角文字と全角1バイト目の文字(0x80~0x9Fと0xE0~0xFC)と2バイト目の文字を判定するべきです。 その他にヌル0x00や改行コードなどの制御文字コードをどうするかの処理も必要です。 それで、20バイト目が全角1バイト目の文字コードになるなら、 その文字はキャンセルして、頭から19文字だけ使用します。 次の読み込みでは、前回の最後の文字+次に読み込んだ20文字にして また、頭から見ていきます。

すると、全ての回答が全文表示されます。
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

どの程度の大きさのファイルなのでしょう? 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) といった具合です

すると、全ての回答が全文表示されます。

関連するQ&A