No.65-1 |
区点コードから文字に変換したい |
回答者 高橋 周助 |
1997年12月 191号 P.28 |
◆ No.65(1997年 11月号)の回答-1
ご質問の中のプログラムで試してみると、63区以上ではうまくいかないようです。16行目、ELSEの後のLETが抜けているのは、何かのハズミでしょう。
どう直せば良いか頭が回りませんので、私なりのプログラムを作ってみました。これを解読して頂ければ、原理的なものがわかってもらえるかな、と思います。
なお、以下の計算式は、Windows3.1に付属していた『日本語入力ガイド』<MS IME for Windows>の巻末の表から割り出してみたものです。外字コード領域と拡張文字領域(供給元によって差がある)はカバーしていません。
1 <TEST>
2 LET V40="0158 2603 2378 0446 2833 4468 4002 0159";
3
4 DISP OPEN;
5 LET V40=FORM$(V40,3);
6 LET X40=LEN(V40);
7
8 FOR X2=1 TO X40 STEP4;
9
10 /**** 『区』に対応する 上位バイト ******************/
11 LET V11=MID$(V40,X2,2); LET X11=IVAL(V11);
12 IF X11<=62 THEN LET V11=HEX$((X11+1)/2+128);
13 IF X11>62 THEN LET V11=HEX$((X11+1)/2+192);
14
15 /**** 『点』に対応する 下位バイト ******************/
16 LET V12=MID$(V40,X2+2,2); LET X12=IVAL(V12);
17 IF X11 MOD 2=1 AND X12<=64 THEN LET V12=HEX$(X12+63);
18 IF X11 MOD 2=1 AND X12>64 THEN LET V12=HEX$(X12+64);
19 IF X11 MOD 2=0 THEN LET V12=HEX$(X12+158);
20
21 /**** 表示 ********************************************/
22 DISP CHR$(HEXVAL(V11+V12));
23
24 NEXT;
25 STOP;
| |
|
| |