文字列演算子
この節では、引数が文字列である演算子をリストアップします。また、他の値から文字列を生成する演算子も扱います。
基本的な文字列演算子
文字列の結合: <string1> + <string2>
説明: +
演算子はひとつの文字列に他のものを付け加えます。その結果は文字列になります。引数のうち少なくとも一つが文字列であれば、他の引数は自動的に文字列に変換されます。
例:
式 | 結果
|
"Cindy"+"Script" | "CindyScript"
|
"4たす3は "+(4+3) | "4たす3は 7"
|
""+(4+3) | "7" .
|
参照: +
演算子は数値の加法にも用いられます。
算術演算子を参照してください。
文字列への変換: text(<expr>)
説明: この演算子は <expr> を評価し、結果を文字列に変換します。
文字列の長さ: length(<string>)
説明: この演算子は、文字列の文字数を返します。
例: length("CindyScript")
の結果は
11
です。
参照: リスト
文字列の抜きだし: substring(<string>,<int1>,<int2>)
説明: この演算子では
<string>
の
<int1>
文字目の次から
<int2>
文字目までの文字列を抜き出します。
例: substring("abcdefg",3,6)
は
"def"
を返します。
文字列の検索: indexof(<string1>,<string2>)
説明: この演算子は、文字列
<string2>
が
<string1>
の中にあるかどうかを検索し、最初に見つかった位置を返します。もし
<string2>
が
<string1>
の中になければ
0
を返します。
式 | 結果
|
indexof("CindyScript","i") | 2
|
indexof("CindyScript","y") | 5
|
indexof("CindyScript","z") | 0
|
文字列の検索: indexof(<string1>,<string2>,<int>)
説明: この演算子は、文字列
<string2>
が
<string1>
の <int>文字目以降にあるかどうかを検索し、最初に見つかった位置を返します。もし
<string2>
が
<string1>
の <int>文字目以降になければ
0
を返します。
式 | 結果
|
indexof("CindyScript","i",1) | 2
|
indexof("CindyScript","i",3) | 9
|
indexof("CindyScript","i",10) | 0
|
高度な文字列演算子
文字列の分解: tokenize(<string>,<expr>)
説明: この演算子は、入力された文字列を解析するのに大変有効です。引数
<string>
の部分文字列のリストを作成します。2番目の引数
<expr>
は、文字列か、文字列のリストでなければなりません。もし
<expr>
が文字列であれば、
<string>
からこの文字列を検索します。この文字列は
<string>
を分解するときの標識となります。
もし <expr> が文字列のリストであれば、このリストを再帰的に使って
<string>
の部分文字列のリストを生成します。
標識が存在しない場合、間違った結果を返すことがあります。その場合には修飾子を使います。
例:
式 | 結果
|
tokenize("one:two--three:four",":") | ["one", "two--three", "four"]
|
tokenize("one:two--three:four","-") | ["one:two", "", "three:four"]
|
tokenize("one:two--three:four","--") | ["one:two", "three:four"]
|
tokenize("one:two--three:four",["-",":"]) | [["one", "two"], [], ["three", "four"]]
|
tokenize("one:two--three:four",["--",":"]) | [["one", "two"], ["three", "four"]]
|
tokenize( "77777777777777777",":")")} | [77777777777777776]
|
tokenize( "77777777777777777",":",autoconvert->false)")} | [77777777777777777]
|
文字列の置換: replace(<string1>,<string2>,<string3>)
説明: この演算子は、<string1>の中の <string2> をすべて <string3>で置き換えます。
この演算子は、Lindenmeyerシステムと呼ばれる文字列置き換えシステムを作成するときにとても役立ちます。
例:
式 | 結果
|
replace("one:two--three:four","o","XXX") | "XXXne:twXXX--three:fXXXur"
|
replace("F","F","F+F") | "F+F"
|
replace("F+F","F","F+F") | "F+F+F+F"
|
文字列の置換: replace(<string>,<list>)
説明: この演算子は前のものとよく似ています。
<list>
は
<string>
に対して、置き換えをする文字列の組合せからなるリストです。
例:
式 | 結果
|
replace("XYX",[["X","one"],["Y","two"]]) | "onetwoone"
|
文字列の解析: parse(<string>)
説明: この演算子は、文字列の内容を解析して、その結果を評価します。この演算子は、テキストフィールドから入力された文字列を処理するのに特に有効です。
例:
次のコードは、
f(x)
を
sin(x)+cos(x)
で定義します。
text="sin(x)+cos(x)";
f(x):=parse(text);
文字列の解析: guess(<number>)
説明: この非常に強力な演算子については
特殊演算子の節で詳説します。それは浮動小数点で表された数を、高い精度でその浮動小数点数を生み出す数式に変えようとします。
例:
式 | 結果
|
guess(8.125) | "65/8"
|
guess(0.774596669241483) | "sqrt(3/5)"
|
参照: 計算
数を整形する: format(<number>,<int>)
説明: この演算子は、第1引数の数の小数点以下を、第2引数で指定された桁まで、文字列として整形します。最高14桁まで可能です。引数がリストの場合は、各要素に対して整形がなされます。
例:
式 | 結果
|
format(sqrt(2),4) | "1.4142"
|
format(pi,14) | "3.14159265358979"
|
format([sin(30°),cos(30°)],3) | [0.5,0.866]
|
注意: format命令は、出力としての整形を行なうだけです。整形された値は文字列として扱われますので計算はできません。次の例を見てください。
式 | 結果
|
format(sqrt(2),4)+format(sqrt(2),4) | "1.41421.4142"
|
文字列の比較と並べ替え
数と同様、文字列も順序付けができます。したがって、演算子
>,
<,
>=,
<=,
==,
!= を使って比較ができます。これらの演算子については
ブール演算子 を参照してください
文字の順序としては、辞書順を使います。たとえば、次のようになります。
"a"<"abd"<"abe"<"b"<"blue"<"blunt"<"xxx"
リストの並べ替え: sort(<list>)
リストの並べ替え: sort(<list>,<expr>)
リストの並べ替え: sort(<list>,<var>,<expr>)
説明: いくつかの
並べ替え
-演算子が文字列を含むリストを並べ替えるのに使えます。 並べ替えの順序は常に辞書順です。あるいは、文字列の長さのように、ユーザーが順序を定義することもできます。
例:
式 | 結果
|
sort(["one","two","three","four","five"]) | ["five","four","one","three","two"]
|
sort(["one","two","three","four","five"],length(#)) | ["one","two","four","five","three"]
|
参照: リスト
文字列中の文字へのアクセスと置き換え
指標演算子: <string>_<int>
説明: リストの項目にアクセスする挿入演算子
_
は、文字列内の特別な位置にある文字にアクセスするのにも使えます。この演算子で、文字を返したり、文字をセットしたりすることができます。
例:
式 | 結果
|
"CindyScript"_5 | "y"
|
"CindyScript"_12 | _?_
|
次のコードでは、変数
a
は
"CinderellaScript"
になります。
a="CindyScript";
a_5="erella";