Strings in C.Basic
純正CasioBasicと同じくStr文字変数や文字列関数が使えますが、文字列の実体は行列として実装しています。
プレフィックスとして$を付けることでMat行列は文字列として認識されます。
(例)["ABCDEF"]→Mat A
Locate 3,3,$Mat A
画面座標(3,3)に"ABCDEF"が表示されます。
最初に
{7,1}→Dim Mat A.B
と同じ初期化が自動的にされます。
そして文字列は行列内ではバイト型データとして格納されます。
・CasioBasic互換で使える文字列関数
+ 文字列同士の連結
StrJoin(
StrLen
StrCmp(
StrSrc(
StrLeft(
StrRight(
StrMid(
Exp>Str(
Exp(
StrUpr(
StrDwr(
StrInv(
StrShift(
StrRotate(
(例)"ABCDEF"→Str 1
Locate 3,3.StrRight(Str 1, 3)
画面座標(3,3)に"DEF"が表示されます。
fx-9860GIIで使われる文字は1バイト文字(英数字、一部のコマンド)と2バイト文字(ほぼすべてのコマンド、特殊文字およびカナ)があり、
内部では1バイトと2バイト文字が混在する状態となりますが、文字関数での扱いは純正同様にすべて1文字扱いとなります。
文字列が格納された行列要素に直接アクセスする場合は文字の位置に注意して下さい。
Initialization of String
純正と同じ文字変数Str 1-20はデフォルトではMat行列のs(小文字)を暗黙的に使用します。
デフォルトでは文字数が64文字までとなっています。
Str文字変数は自動的にMat行列として確保され、次の文字列コマンドにおいては純正互換で使えるので、行列を意識する必要はありません。
Str文字列の初期化は何も指定なければ次のようにMat s行列の初期化が自動的に行われます。
{20,65}→Dim Mat s
なお、Str文字変数の実体となるMat行列は任意指定することも出来、Str変数を使う前にコメント欄で指定します。
(例)'#Str A
Str変数をMat Aとして確保します。
{20,65}→Dim Mat A.B
と同じです。
(例)'#Str B,30,256
Str変数をMat Bとして30個、255文字まで可能な変数として確保します。
文字列の代入は次の書式が使えます。
(例)"ABCDEEF"→Str 1
(例)["ABC","TEST","1+3+5"]→Mat A
バイト型のMat A[3,6]行列を自動的に確保してそれぞれの要素に文字列を配置します。
Mat A[1,1]="ABC"
Mat A[2,1]="TEST"
Mat A[3,1]="1+3+5"
となります。
文字列対応コマンドで"ABC"にアクセスするには$Mat A、もしくは$Mat A[1],もしくは$Mat A[1,1]となります。
"1+3+5"をアクセスするには$Mat A[3],もしくは$Mat A[3,1]となります。
(例)Locate 1,1,$Mat A
Locate 1,1,"ABC"と同じです。
(例)Locate 1,1,$Mat A[3,3]
Locate 1,1,"3+5"と同じです。
現バージョンでの文字列対応コマンドです。””の代わりに$Mat形式で使用します。
・””
(例)$Mat A[1]
"ABC"と同じです。
・?
(例)?→$Mat A
行列Mat Aに文字列を入力します。確保している要素数で文字数が制限されます。
・Locate
・Text
・LocateYX
・Eval(
(例)Eval("1+2+3")→6
(例)Eval($Mat[3,3])→8
文字列を数式として評価、値を返します。
Sprintf - an Extended Command
純正には数値から文字列への変換関数が無いので、追加の文字列関数としてC言語仕様のSprintf(を追加しました。
(仕様)Sprintf( "書式指定子" , 引数1[ ,引数2 [, 引数3]])
(例)Sprintf("A=%4d B=%3.2f",%A,#B)→Str 1
A=1234,B=45.678の場合、
Str 1に代入される文字列は
"A=1234 B=45.68"
となります。
書式指定はC言語でのsprintfと互換仕様となります。
引数は3つまで指定することが出来、整数/実数/文字列が指定可能です。
%プレフィックスで整数指定、#プレフィックスで実数指定となります。
プレフィックスを省略した場合はその時点での実行モード(実数/整数)となります。
書式指定と引数の対応のエラーチェックは無いので、Sprintf(コマンドでエラーが起きた場合はリセットか再起動となる可能性があります。