LlCSV2List/ja
LSL ポータル | 関数 | イベント | 型 | 演算子 | 定数 | 実行制御 | スクリプトライブラリ | カテゴリ別スクリプトライブラリ | チュートリアル |
要約
関数: list llCSV2List( string src );
この関数は、各要素がカンマで区切られた文字列を受け取り、list 変数へ変換します。
カンマ区切り形式の文字列 src を切り分けたリストを list で返します。
• string | src |
リストをカンマ区切り形式へ変換する場合は llList2CSV を使ってください。
この関数が扱うのは、厳密な意味での CSV 形式ではありません。
仕様
Vector 値と Rotation 値
"<" と ">" の間にある内容は全て、カンマの有無に関わらず、一個の値とみなされます
すなわち vector 値や rotation 値は、一個の string 値として扱われ、それ以上の型変換は行なわれません。
"<" には常に対応する ">" が必要というのは注意すべき点で、これが無いと残りの文字列を一続きのものとして解釈してしまいます。例えば、
• | llCSV2List("<>,>,a")
|
– | の戻り値は ["<>", ">", "a"]
|
(二番目の ">" が孤立しています) |
• | llCSV2List("<<>,>,a")
|
– | の戻り値は ["<<>,>", "a"]
|
(どの括弧もペアになっています) |
• | llCSV2List("<<<>,>,a")
|
– | の戻り値は ["<<<>,>,a"]
|
(三番目の "<" には対応する閉じ括弧がありません) |
型
この関数はリストの要素の型が何であるかについて推測を行わず、できあがったリストの要素は全て string となります。llList2 系関数の暗黙の型変換は明示的な型変換と同じようには動作しないことにご注意ください。以下の表は、それぞれの型が最適な型変換を行うことのできるコード例を示しています。
対象 | コード | 説明 |
---|---|---|
integer | (integer)llList2String(mlist, mint)
|
llList2Integer は HEX フォーマットをサポートしない |
float | (float)llList2String(mlist, mint)
|
llList2Float は指数表記や 16 進表記をサポートしない |
string | llList2String(mlist, mint)
|
常に安全 |
key | llList2Key(mlist, mint)
|
常に安全 |
vector | (vector)llList2String(mlist, mint)
|
llList2Vector はゼロベクトルを返す |
rotation | (rotation)llList2String(mlist, mint)
|
llList2Rot はゼロ回転を返す |
Whitespace
llCSV2List は全要素から先頭のスペースのみ自動的に取り除きます
list tmp = llCSV2List("first , second , third");
// ["first ","second ","third"] が返ります。
// ["first "," second "," third"] ではありません。
警告
- "<" に対応する ">" が無い場合、たとえ途中に "<" がまたあったとしても、文字列の残りの部分は一つの値と見なされます。詳細はVector値とRotation値の項を参照してください。
- 戻り値の全ての要素は string 型です。
- 空文字列を切り分けた場合、戻り値は空のリストでなく、空文字列が入ったリスト [""] になります。
サンプル
<lsl>default {
state_entry() { string csv = "first,second,third"; list my_list = llCSV2List(csv); llOwnerSay("CSV: " + csv); integer i; integer num_list=llGetListLength(my_list); for (i=0; i<num_list; ++i) { llOwnerSay("my_list[" + (string)i + "]: " + llList2String(my_list,i)); } }}</lsl>
注意点
カンマ以外の区切り文字を使う場合、例えばユーザの自由入力 (それ自体カンマを含んでいる) を扱うのでカンマが区切り記号として適切でないといった場合などは、代わりに llParseString2List を使うことでカンマ以外の区切り記号を指定できます。ただし llParseString2List は rotation 型や vector 型の処理に必要な、括弧対応を踏まえた切り分けは行なわず、各要素の前後にあるスペースの削除も行ないません。