|
こんにちは、およよです。
ichinoseさん、お返事ありがとうございます。
即興で、こんなに書けるとは凄いですね。脱帽です。
えぇ〜。これを理解するまでちょっとお時間下さい。
自分が勉強不足だと改めて感じました。とほほです。
お返事のソースをうまく活用したいです。
結果はどうなるか分かりませんが、頑張ります。
ありがとうございます。
▼ichinose さん:
>皆さん、こんばんは。
>
>>
>>例えば・・・
>>
>>メルマガ
>>
>>をVBAのMidを使って読み取ると
>>
>>$B%a%k%^%,
>>
>>なふうになってしまいます。
>>
>>これってシフトJISではないのかな・・・。
>これは、JISコード(EBCDIC)ではないですか?
>KIコードも入っていますね?
>
>どっか探せばツールもあるんでしょうねえ・・・。
>
>よって、JISコードをExcel上で表示できるようにすればよい
>ということですか?
>
>>$B%a%k%^%,
>これは、推測ですが、HEXコードで表すと
>
>&H1B, &H24, &H42, &H25, &H61, &H25, &H6B, &H25, &H5E, &H25, &H2C
>
>このようになっているのではないですか?
>
>どういうコードで読み込んでいるのかわかりませんが、
>
>テキストファイルに上記のJISコードで書き込んだファイルを読み込んで
>Excel上で表示可能にすることを考えます。
>
>
>標準モジュールに
>'================================================================
>Sub 例()
> On Error Resume Next
> Dim flno As Long
> Dim wb(1 To 13) As Byte
> Dim ar As Variant
> Dim idx As Long
> Kill ThisWorkbook.Path & "\jiscode.txt"
> flno = FreeFile()
> Open ThisWorkbook.Path & "\jiscode.txt" For Binary As #flno
> For Each ar In Array(&H1B, &H24, &H42, &H25, &H61, &H25, &H6B, &H25, &H5E, &H25, &H2C, &HD, &HA)
> wb(idx + 1) = ar
> idx = idx + 1
> Next
> Put #flno, , wb()
> Close #flno
>End Sub
>
>
>上記のコードでJISコードで「メルマガ」とjiscode.txtに書き込みます。
>
>バイナリエディタで上記のArray()の中のHexコードが正しく書き込まれているか
>確認してみてください。
>
>以下のコードで、
>このjiscode.txtを読み込んでデータを加工して表示可能にします。
>
>
>'====================================
>Sub main()
> Dim flno As Long
> Dim jisdata As String
> flno = FreeFile()
> Open ThisWorkbook.Path & "\jiscode.txt" For Input As #flno
> Line Input #flno, jisdata
> Close #flno
> MsgBox cnvjis(jisdata)
>End Sub
>'=======================================================================
>Function cnvjis(mystr As String) As String
> Const esc = 27
> Const ki1 = "$"
> Const ki2 = "B@"
> Const ko1 = "("
> Const ko2 = "BJ"
> Dim idx As Long
> Dim sv As Long
> Dim ki_mode As Long
> Dim e_mode As Long
> For idx = 1 To Len(mystr)
> If Asc(Mid(mystr, idx, 1)) = esc Then
> e_mode = 1
> ElseIf e_mode = 1 Then
> If Mid(mystr, idx, 1) = ki1 Then
> e_mode = 2
> ElseIf Mid(mystr, idx, 1) = ko1 Then
> e_mode = 3
> Else
> e_mode = 0
> End If
> ElseIf e_mode = 2 Then
> If Mid(mystr, idx, 1) = Mid(ki2, 1, 1) Or Mid(mystr, idx, 1) = Mid(ki2, 2, 1) Then
> e_mode = 0
> ki_mode = 1
> Else
> e_mode = 0
> End If
> ElseIf e_mode = 3 Then
> If Mid(mystr, idx, 1) = Mid(ko2, 1, 1) Or Mid(mystr, idx, 1) = Mid(ko2, 2, 1) Then
> e_mode = 0
> ki_mode = 0
> Else
> e_mode = 0
> End If
> ElseIf e_mode = 0 Then
> If ki_mode = 0 Then
> cnvjis = cnvjis & Mid(mystr, idx, 1)
> ElseIf ki_mode = 1 Then
> sv = Asc(Mid(mystr, idx, 1)) * 256
> ki_mode = 2
> ElseIf ki_mode = 2 Then
> sv = sv + Asc(Mid(mystr, idx, 1))
> cnvjis = cnvjis & Evaluate("char(" & sv & ")")
> ki_mode = 1
> End If
> End If
> Next idx
>End Function
>
>即興なのでバグがあるかもしれませんが
>(何せこの手のコードは15年ぶりくらいですから)
>
>これでうまくおいくようでしたら、このconvjisという関数を使って
>実際のデータを試してみてください。
|
|