[リストへもどる]
一括表示

投稿時間:2004/03/05(Fri) 19:44
投稿者名:澤田
Eメール:
URL :
タイトル:
【再質問】文字コード変換について
以前に以下のような質問させていただいた事に関連しての追加質問です。
/************************************************************/
ファイル内容を2バイトずつ読込み[F040]〜[F1FC]を[EB40]〜[ECFC]に
[FA40]〜[FCFC]を[ED40]〜[EFFC]にそれ以外はそのまま出力したい。
/************************************************************/

以前ak様にサンプルをいただいたものを使わせていただき、作業をして
いるのですが、変換してみると最後の文字コードの後に必ず "00"がつい
てしまいます。
ファイルが1,2バイト混在だからなのでしょうか、最後の1バイトの
時にどうしてもH'00xx'のH'00'が出力されてしまうようです。
(下記に例を示します。)

いろいろ試してみたのですが、どうにもうまくいきません。
VB初心者なうえにバイナリ形式での扱いに不慣れなことも有って、恥ず
かしながらサンプルの提供までしてもらっているのに、お手上げです。

どうかどなたかお知恵を拝借できませんでしょうか?
ak様から教えていただいたソースは、無断で貼り付けるのはなんなので
貼り付けておりません。
お手数ですがNo8126を参照下さい。

以下に現象の例を示します。

/*****入力ファイル****/
<S-JIS>
あ19え
あ@え
<バイナリ>
82 A0 31 39 82 A6 0D 0A
82 A0 F0 40 82 A6

/*****出力イメージ****/
<バイナリ>
82 A0 31 39 82 A6 0D 0A
82 A0 EB 40 82 A6

/*****実際の出力****/
<バイナリ>
82 A0 31 39 82 A6 0D 0A
82 A0 F0 40 82 A6 00 00

よろしくお願い致します。

投稿時間:2004/03/06(Sat) 19:31
投稿者名:Starfish
Eメール:
URL :
タイトル:
Re: 【再質問】文字コード変換について
以下のソースだとそれなりに動くと思います。
2バイト目を見ていないとか、ファイル番号を固定にしている
とか、手を抜いていますが、実際に使うときは考慮してください。

Private Sub Command1_Click()
    Dim strInputFileName As String
    Dim strOutputFileName As String
    Dim bytData() As Byte
    Dim i As Long
    
    strInputFileName = "C:\TEST.DAT"
    strOutputFileName = "C:\TEST2.DAT"
    
    Open strInputFileName For Binary As #1
    bytData = InputB(LOF(1), 1)
    Close #1

    i = LBound(bytData)
    While i <= UBound(bytData)
        Select Case bytData(i)
            Case 0 To &H80, &HA0 To &HDF
                i = i + 1
            Case &HF0, &HF1
                bytData(i) = bytData(i) - &HF0 + &HEB
                i = i + 2
            Case &HFA To &HFC
                bytData(i) = bytData(i) - &HFA + &HED
                i = i + 2
            Case Else
                i = i + 2
        End Select
    Wend
    
    Open strOutputFileName For Binary As #1
    Put #1, , bytData
    Close #1

End Sub

投稿時間:2004/03/08(Mon) 10:14
投稿者名:澤田
Eメール:
URL :
タイトル:
【解決】文字コード変換について
お返事遅くなり申し訳ありません。

うまくいけました。
サンプルを見せていただくとなるほどと思うのですが、
それを思いつくかというと・・・です。
勉強になりました。

Starfish様ありがとうございます。
本当に助かりました。