テキストファイルに書き込まれている特殊文字をエディタで見ると
文字コードの関係か文字化けしてしまいます。
これを文字化けしない文字に変換したいと思っています。
一応、下記のコードで実現できたのですが、なんせ1バイトづつ処理
しているため100MBもあったりするファイルだと処理に時間がかかり
過ぎてしまいます。
他に方法があればご教授お願いします。
Open WorkFile1 For Binary Access Read Write As #1
Counter = 1
Do While Not EOF(1)
Get #1, Counter, ByteData
Select Case ByteData
Case 64: ByteData = 35
Case 129: ByteData = 92
Case 135: ByteData = 92
Case 164: ByteData = 35
Case 167: ByteData = 94
Case 134: ByteData = 33
Case 137: ByteData = 37
Case 187: ByteData = 62
Case 128: ByteData = 32
Case 0: ByteData = 64
End Select
Put #1, Counter, ByteData
Counter = Counter + 1
Loop
Close #1
時間が掛かるのは1バイトずつ読み込んで書き込んでいるからですね。
100KBずつ読み込んで変換して書き込んだり、Select-Caseで置換するのではなく、
変換する置換列(ただの配列か…)を使ってみるとか。
ファイルI/Oを入力・出力に分ければどうでしょうか?
これだけでも、若干、スピードアップはします。
Dim iFno1 As Integer
Dim iFno2 As Integer
Dim lCounter As Long
Dim ByteData As Byte
iFno1 = FreeFile
Open "D:\Test.txt" For Binary Access Read As iFno1
iFno2 = FreeFile
Open "D:\Test_OK.txt" For Binary Access Write As iFno2
lCounter = 1
Do While Not EOF(iFno1)
Get #iFno1, lCounter, ByteData
Select Case ByteData
Case 64: ByteData = 35
Case 129: ByteData = 92
Case 135: ByteData = 92
Case 164: ByteData = 35
Case 167: ByteData = 94
Case 134: ByteData = 33
Case 137: ByteData = 37
Case 187: ByteData = 62
Case 128: ByteData = 32
Case 0: ByteData = 64
End Select
Put #iFno2, lCounter, ByteData
lCounter = lCounter + 1
Loop
Close iFno2
Close iFno1
遅いようであれば、100バイトくらいのバッファを
ByteDataを配列データとして扱い、
次のループで置換・保存と行うことになります。
ただ、ループ数が2倍になるので、あまり意味がないかもです。
ガッさん、クラゲさんありがとうございました。
配列を使うことでかなり改善しました。