【ご質問】
入力された文字をShift-JISで比較する方法はありますか?
【回答】
{encode-characters}プロシージャを用いることで可能です。
第一水準、第二水準の文字チェックも同プロシージャを用いることで可能です。
|| Shift-JISの文字コードをバイト配列で返す {define-proc {get-sjis-code tf:TextField}:ByteVec let encoding:CharEncoding = {get-character-encoding-by-name “shift-jis”} let code-out:ByteVec = {ByteVec max-size = tf.value.size * encoding.transcode-max-expansion-factor} let (in-used:int, out-made:int) = {encode-characters tf.value, code-out, encoding} {return code-out} }
|| 第一引数が大なら1、第二引数が大なら-1、等しければ0を返す {define-proc {compare byte1:ByteVec, byte2:ByteVec}:int let result:int = 0 {output byte1.size & ” “ & byte2.size} {if byte1.size > byte2.size then set result = 1 elseif byte1.size < byte2.size then set result = -1 else {for i:int = 0 below byte1.size do {if byte1[i] > byte2[i] then set result = 1 {break} elseif byte1[i] < byte2[i] then set result = -1 {break} } } } {return result} }
{value def tf1 = {TextField width = 2cm, max-chars = 1, value = “あ”} def tf2 = {TextField width = 2cm, max-chars = 1, value = “A”} def cm = {CommandButton label = “compare width Shift-jis”, {on Action do || Shift-JISでの比較を行います def byte1 = {get-sjis-code tf1} def byte2 = {get-sjis-code tf2} def result = {compare byte1, byte2} {popup-message {if result > 0 then “left is greater” elseif result < 0 then “right is greater” else “equal” } } } } {HBox tf1, tf2, cm } }
|