[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2007/01/23(Tue) 19:12
投稿者名:お願いします。
Eメール:
URL :
タイトル:
バイナリでの漢字コード判定について
先ほど、質問の回答を頂いたのですが、追加が出ましたのでよろしければどなたか分かる方の
回答をお願い致します。お手数ですが、よろしくお願い致します。

バイナリコードを1バイトづつ読んでいき、漢字の時のみもう1バイトを読み、
41a0から7fffの間に該当する場合はリストに出力、という処理を考えていますが、
バイナリコードのIF文判定が上手く判定してきません。

初歩的な事かもしれませんが、バイナリの1バイトの後ろに1バイトを付けた2バイトと
41a0から7fffの間に該当する場合の処理としてCST等をつけてますが、上手くいかない為、
どなたかポイントでも良いのでご指導ねがいますでしょうか?

先ほどから質問ばかりで申し訳ありません。

ちなみに下記のように下手なりに記入していろいろ試してますが、
あまり上手くいかない為、気になる点があったらご指導願います。

勝手を言って申し訳ないのですが、本日中にこの件への質問への回答ができない可能性があり、
返事が明日になる場合がありますので、ご了承願います。


'読み込み用
    Dim buf(0)  As Byte
'データ判定用
    Dim buf2(1)  As Byte
'41A0判定用
    Dim bufstr(1)  As Byte
'7FFF判定用
    Dim bufend(1)  As Byte
'添え字等
    Dim i As Long
    Dim flag As String
'読み込み
    Open "C:\test.TXT" For Binary As #1
    Get #1, , buf
    flag = "0"
'41A0を判定用に退避
    bufstr(0) = &H41
    bufstr(1) = &HA0
'7FFFを判定用に退避
    bufend(0) = &H7F
    bufend(1) = &HFF
'ファイル終るまで    
    Do Until EOF(1)      
        i = i + 1
'1バイト目が28なら漢字判定対象                                      
        If buf(0) = &H28 Then
            flag = "1"
        End If
        Do Until flag = "0"
            Get #1, , buf
'29が出たら漢字終了、出るまでは漢字編集
            If buf(0) = &H29 Then
                flag = "0"
            Else
'1バイト目を判定エリアに編集
                buf2(0) = buf(0)
'2バイト目を読み、判定エリアに編集
                Get #1, , buf
                buf2(1) = buf(0)
'41a0-7fffの範囲内なら表示する
                If ((CStr(bufstr) <= CStr(buf2)) And (CStr(buf2) <= CStr(bufend))) Then
                    Debug.Print Hex(buf2(0)) & Hex(buf2(1))
                End If
            End If
        Loop
        Get #1, , buf
    Loop
    Close #1

投稿時間:2007/01/24(Wed) 10:32
投稿者名:y4yama
Eメール:
URL :
タイトル:
Re: バイナリでの漢字コード判定について
>初歩的な事かもしれませんが
次のコードを実行して試してみればいいのですが・・こういうことは質問する前にできませんか?
    Dim bufstrq(0)  As Byte
    bufstrq(0) = &H41       'A'
    MsgBox CStr(bufstrq)
    '41A0判定用
    Dim bufstr(1)  As Byte
    bufstr(0) = &H41
    bufstr(1) = &HA0
    MsgBox CStr(bufstr)
    bufstr(0) = &H42
    MsgBox CStr(bufstr)
    
    MsgBox bufstr(0) * 256 + bufstr(1) '16800
    
    Dim bufend(1)  As Long  'Integerでオーバーフローする可能性があれば・・
    bufend(0) = &H80
    bufend(1) = &HA1
    Dim L1 As Long
    L1 = bufend(0) * 256 + bufend(1)
    MsgBox L1

尚、ファイルが長さ0のとき、と、最後が「漢字終了」のときに、Get #1, , bufは失敗するから、ソフトとして不完全なような気がしますが・・

投稿時間:2007/01/24(Wed) 15:55
投稿者名:お願いします。
Eメール:
URL :
タイトル:
Re: バイナリでの漢字コード判定について
y4yamaさん、お返事ありがとうございます。
サンプルを見ながらじっくり確認していきます。