![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
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
これだと、半角と全角が混じっている箇所で文字化けを起こしてしまいます。
以上です。よろしくお願い致します。
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メソッドを実行すると、さすがに
エラーになります。
No.2
- 回答日時:
それは、20バイト固定にしたらおかしくなりますよね。
横着しないで、頭から文字コードを1文字ずつ抜き出して、
半角文字と全角1バイト目の文字(0x80~0x9Fと0xE0~0xFC)と2バイト目の文字を判定するべきです。
その他にヌル0x00や改行コードなどの制御文字コードをどうするかの処理も必要です。
それで、20バイト目が全角1バイト目の文字コードになるなら、
その文字はキャンセルして、頭から19文字だけ使用します。
次の読み込みでは、前回の最後の文字+次に読み込んだ20文字にして
また、頭から見ていきます。
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が見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Excel(エクセル) マクロでテキストファイルを読み込んだ際の最終セルにデータと改行が含まれる問題の改善方法 2 2022/03/25 16:50
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/15 15:48
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
- Excel(エクセル) VBA フォルダ見える化のコードについて 2 2023/06/19 15:04
- Visual Basic(VBA) フォルダの場所を可変にしたいです(マクロ) 4 2023/05/11 10:00
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Visual Basic(VBA) 貼り付けた値が消えていく 以下はソースファイルの2番目のシートのB6から最終行を取得 ターゲットファ 2 2023/07/27 12:23
- Android VBA、フォルダのパスに環境文字 ㉑ があり、VBAが機能しません。 2 2022/07/27 09:16
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EXCELのVBAでLenB関数について
-
CString型 全角半角を意識せず...
-
アクセス ステータスバーの文...
-
TextFieldParserの固定長桁数を...
-
VBScriptで半角カナと半角英数...
-
「シフトJIS X 0213」形式の文...
-
一番右のスペース以降の文字列...
-
エクセルで13,410円を数値の134...
-
機種依存文字と特殊文字について
-
【C#】textBoxの指定行のデータ...
-
Access 2010で実行時エラー3061
-
【VB】コンボボックスにデータ...
-
VBA 変数名に変数を使用したい。
-
VBScriptでCSVファイルを読み出...
-
ADODBでの行番号の取得、もしく...
-
配列の中の最大値とそのインデ...
-
VB6.0の「vbFromUnicode」はVB....
-
MSFlexGrid 行選択状態
-
複数SQL発行について
-
DataGridの中身をDataSetにテー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ファイル名の一部削除について
-
EXCELのVBAでLenB関数について
-
CString型 全角半角を意識せず...
-
TextFieldParserの固定長桁数を...
-
文字列から、null値を除去する方法
-
一番右のスペース以降の文字列...
-
StrConvでUnicodeに変換出来な...
-
エクセルで13,410円を数値の134...
-
機種依存文字と特殊文字について
-
アクセス ステータスバーの文...
-
VB6.0 文字列のファイル書...
-
VB6のテキストボックスに入力し...
-
「シフトJIS X 0213」形式の文...
-
ワードのVBAで
-
VB.NET ListBox内の前方一致で...
-
【Excel VBA】セル内テキストの...
-
HEX
-
8進数文字、16進数文字とは
-
VBからID3タグをいじる方法
-
WSTRINGとは?
おすすめ情報