=ここから=
option character kanji
input prompt "全角で1文字入力してください:":a$
let b=ord(a$)
let b$=str$(b)
let c$=bstr$(ord(a$),16)
let d$=right$(c$,2)&left$(c$,2)
print
print chr$(bval(c$,16))&"(JIS:"&c$&")"&" -> "&chr$(bval(d$,16))&"(JIS:"&d$&")"
end
=ここまで=
猶、例外が出る文字番地を一覧するもの書いてみました。
=ここから=
rem -- 全角文字の始点:8481 (2121) / 終端:38700 (972C) --
rem -- 結果出力は画面表示よりファイルに書き出した方が早いかも --
option arithmetic decimal
option character kanji
do
input prompt "どこから見る?(半角始点=1,全角始点=2)":start
if start=1 or start=2 then
exit do
elseif start=0 then
stop
else
end if
loop
select case start
case is =2
let start=8481
case else
end select
for count=start to 38700 step 1
let hcount$=bstr$(count,16)
let strcount$=str$(count)
when exception in
print chr$(39)+chr$(count)+chr$(39)+" chr$("+strcount$+") <-> JIS ["+hcount$+"]"
use
print chr$(7)+"例外"+str$(extype)+chr$(7)+" chr$("+strcount$+") <-> JIS ["+hcount$+"]"
end when
next count
end
=ここまで=
Windows XP (Windows2000) は文字コードがユニコードに変更されています。
シフトJISの文字はユニコードに変換されて表示されます。
シフトJISとJISの対応は,一応,一対一とみなせますが,
ユニコードとJIS(あるいはシフトJIS)との対応は一対一ではありません。
シフトJIS→ユニコード→シフトJISと変換すると元に戻らないことがあります。
十進BASICの場合,ファイル入出力はシフトJISなので,
画面に表示した文字をクリップボード経由で取り出すのでなく,
ファイルに書き出した文字を対象にすれば,問題は起こりにくくなると思います。
100 OPTION CHARACTER KANJI
110 INPUT PROMPT "全角で1文字入力してください:":a$
120 LET b=ORD(a$)
130 LET b$=STR$(b)
140 LET c$=BSTR$(ORD(a$),16)
150 LET d$=right$(c$,2)&left$(c$,2)
160 PRINT
170 PRINT CHR$(BVAL(c$,16))&"(JIS:"&c$&")"&" -> "&CHR$(BVAL(d$,16))&"(JIS:"&d$&")"
180 OPEN #1:NAME "A:TEST.TXT"
190 ERASE #1
200 PRINT #1:CHR$(BVAL(d$,16))
210 CLOSE #1
220 OPEN #2:NAME "A:TEST.TXT"
230 INPUT #2:s$
240 CLOSE #2
250 PRINT BSTR$(ORD(s$),16)
260 END
100 OPTION ARITHMETIC DECIMAL
110 OPTION CHARACTER KANJI
120 FOR hi=BVAL("21",16) TO BVAL("73",16)
130 FOR lo=BVAL("21",16) TO BVAL("7E",16)
140 LET count=hi*256+lo
150 LET hcount$=BSTR$(count,16)
160 LET strcount$=STR$(count)
170 WHEN EXCEPTION IN
180 PRINT
CHR$(39)&CHR$(count)&CHR$(39)&" chr$("&strcount$&")
<-> JIS ["&hcount$&"]"
190 USE
200 PRINT
CHR$(7)&"例外"&STR$(EXTYPE)&CHR$(7)&"
chr$("&strcount$&") <-> JIS ["&hcount$&"]"
210 END WHEN
220 NEXT lo
230 NEXT hi
240 END
【質問】chr$での文字表示について
投稿日:2008年 9月 2日(火)04時49分9秒※こちらの掲示板に書かせていただきます。
当方、WindowsXp + 十進BASIC 7.2.7という環境です。
前に十進BASICとUltraBASICの違いを質問した者です、よろしくお願いします。
print chr$(...)
て具合に番地指定で文字表示させる際に
WindowsのIMEパッドで見える範囲を指定してるのにちょくちょく例外が発生します。
=ここから=
option character kanji
input prompt "全角で1文字入力してください:":a$
let b=ord(a$)
let b$=str$(b)
let c$=bstr$(ord(a$),16)
let d$=right$(c$,2)&left$(c$,2)
print
print chr$(bval(c$,16))&"(JIS:"&c$&")"&" -> "&chr$(bval(d$,16))&"(JIS:"&d$&")"
end
=ここまで=
例として、上記プログラムでa$に「日」と入力した場合に出力される文字を
テキストウィンドウ内でコピーしてからプログラムを再実行して
2回目のa$入力でペーストすれば「裏の裏は表」となり、今度は「日」が出力されるはずだと思うのですが
なぜかここで例外4002が発生してしまいます。
当方の記述にまずい点があればご教示いただけませんでしょうか。
それともFull Basicの規格に準拠する仕様上、当然の結果なのでしょうか?