お世話になります。
バイナリーで呼んでS-JISに変換しようとしています。
下記のようにコーディングしています。
一番最後のバイトを読んだらBINARY_ERRORに飛んで、処理されません。
コーディングの仕方の問題があるのでしょうか。急いでます。どなたかアドバイスをお願いします。
lngFL_SIZE = FileLen(strFL_NAME)
ReDim bytREC(lngFL_SIZE - 1)
Open strFL_NAME For Binary Access Read As #1
Get #1, , bytREC
On Error GoTo BINARY_ERROR
strEMS = strFL_NAME & "のバイナリモードでの処理中に失敗しました"
lngI = 0
Do While lngI <= UBound(bytREC)
bytU = bytREC(lngI)
bytL = bytREC(lngI + 1)
If bytU <= &H20 Then
strTARGET = strTARGET & "."
lngI = lngI + 1
ElseIf ((bytU >= &H81 And bytU <= &H9F) And bytL >= &H40 Then
strTARGET = strTARGET & Chr((Val("&H" & Hex(bytU)) * 256) + Val("&H" & Hex(bytL)))
lngI = lngI + 2
Else
strTARGET = strTARGET & Chr(Val("&H" & Hex(bytU)))
lngI = lngI + 1
End If
Loop
strEMS = ""
Exit Function
BINARY_ERROR:
Debug.Print lngI, Hex(bytU)
Close #1
>BINARY_ERRORに飛んで、処理されません
処理されないのは、質問内容にかかれていない重要な情報である
Debug.Print lngI, Hex(bytU)
でしょうか?
急いでいるのは分かりますが、その辺の情報がないとなんとも
すみません。
一番最後のバイトがエラーで Debug.Print lngI, Hex(bytU)に表示されます。
総バイト数-1まで処理されて一番最後が処理されません。
宜しくお願いします。
まずはエラートラップを解除して、どの行で、
なんと言うエラーが発生しているのかを確認してください。
お世話になります。下記が表示されます。
strEMS = strFL_NAME & "のバイナリモードでの処理中に失敗しました"
Do ループを変更しましたが、やはり同じエラーメッセージ表示され、
Debug.Print lngI, Hex(bytU)には総バイト+1のlngIが表示されました。
バイナリーファイルを読んで1バイト文字化2バイト文字化のチェックをして
1バイトならそのまま、2バイト文字なら2バイトをセットして総バイト数まで処理したら終了としたいのです。
宜しくお願いします。
エラーメッセージの内容ってstrEMSの内容ってことですか?
それなら、
strEMS = strFL_NAME & "のバイナリモードでの処理中に失敗しました"
と書いている以上、どんな場合でもこのメッセージになりますが・・・。
そうではなくて、Err.Descriptionの内容を示してください。
お世話になります。
下記が表示されました。
インデックスが有効範囲にありません。
宜しくお願いします。
小学生以下のコミュニケーション能力ですね。
ここはサポートセンターじゃないですよ。
すみません。
分かっているのですが、はまてしまってうまく行かないのであせっています。
Do while lngI <= UBound(bytREC) でループさせているのですが、
最後の1バイトがうまくいかなくて、インデックスのエラーになってしまいます。
オーバーしていると思い色々してみましたが、同じ結果でした。
根本的な問題でしょうか。
Do while lngI <= UBound(bytREC) ということは、
lngIは最大でUBound(bytREC)と同じになるということですよね。
そのとき、bytL = bytREC(lngI + 1)とその最大値に1を足しているので
インデックスエラーになります。
lngI = UBound(bytREC)場合は、 bytLを使わないようにすればいいのでは?
コードを解読したわけじゃないから、bytLが本当に不要かどうかはわからない
けど(^^;
ところで、何をS-JISに変換したいのでしょうか?
もしかするとADODB.Streamを使えば、簡単に出来るかもしれません。
お世話になります。
LESIAさんの指摘通りロジックを修整して、何とか行くようになりました。
異動がかかっているのであせっています。
これからも初歩的な質問もあると思いますが、宜しくお願いします。
すみません。解決のチェックを忘れていました。
ツイート | ![]() |