・原理
文字列リテラルに、配列変数のように添字を付けると、文字列の中の1文字(1要素)だけを取り出す事が出来る。
?"ABCDE"[0]
A ←先頭から0番目にある文字、"A"が表示される(5以上の添字を指定するとエラーとなる)
文字を入れてある変数に対しても同じ事が出来る。
A$="ABCDE"
OK
?A$[4]
E ←A$の中の先頭から4番目にある文字、"E"が表示される
空の文字("")を代入すると、添字の位置にある文字が削除され、その後ろの文字が詰められる。
A$="ABCDE"
OK
A$[2]=""
OK
?A$
ABDE ←先頭から2番目の文字"C"が削除され、"D"から後ろが詰められる
このように、文字変数ならばどの位置でも自由に挿入/削除が出来るという原理を応用して、指定した位置の値を挿入/削除する事が出来る、数値配列として使ってみようというコンセプト。
・配列変数の定義と初期値の設定
通常の配列変数では、DIM 変数名[要素数]で定義するが、文字変数を配列として使う場合は、要素の数だけ文字を並べてセットする事で定義を行う。
'通常の数値配列はこのように定義するのに対し…
DIM A[5]
OK
'文字を5個並べて入れる事で、要素数5(初期値は0)の配列として定義する
A$=CHR$(0)*5
OK
'要素数5の配列として定義し、初期値として0をセット
A$=CHR$(0)*5
OK
'要素の一番最後にCHR$でセットしようとするとエラー
A$[4]=CHR$(65)
Subscript out of range
OK
'別の文字変数の値をセットしようとしてもエラー
B$=CHR$(65):A$[4]=B$
Subscript out of range
OK
'文字列リテラルならばセットする事は可能だが、入れられる値が限られる
A$[4]="A"
OK
'要素数5+ダミー文字の配列として定義し、初期値として0をセット
A$=CHR$(0)*5+CHR$(0)
OK
'一番最後に文字を挿入する事は出来ない
A$[5]=CHR$(1)+A$[5]
Subscript out of range
OK
'その1つ手前から追加する事は出来るが、出来れば処理を↑で統一したい
A$[4]=A$[4]+CHR$(1)
OK
'要素数5+ダミー2文字の配列として定義し、初期値として0をセット
A$=CHR$(0)*5+CHR$(0)*2
OK
'これなら一番最後にも文字を挿入出来る
A$[5]=CHR$(1)+A$[5]
OK
FOR I=0 TO LEN(A$)-3:?ASC(A$[I]):NEXT I
0
0
0
0
0 これが挿入される
1 ←(後ろにダミー2文字あるが無視)
OK
myu314さんのCHR$(13)がCHR$(10)になるとの情報、自分でも確認してみました。
もしかしたら他にも勝手に変更される文字とかあるのでは?と。
FOR I=0 TO &HFFFF
INC A$,CHR$(I)
NEXT
で作った文字列をTXTでSAVEした後に読んで確認したところ13だけが10に。
他の文字は変化しませんでした。