Difference between revisions of "Category:LSL String/ja"

From Second Life Wiki
Jump to navigation Jump to search
m (categorized category)
 
(4 intermediate revisions by 3 users not shown)
Line 1: Line 1:
{{LSL Header/ja|ml=*}}{{LSLC/ja|}}{{LSLC/ja|Types}}
{{Multi-lang}}
<div style="float:right">__TOC__</div>
{{LSL Header/ja|ml=*}}
stringはテキストデータです。stringの長さは、有効な[[script memory/ja|スクリプト容量]]の限界までです。 Stringの値はLSLテキストを定義するときに、ダブルクォーテーション(" ")て囲まれます。いくつかの文字はエスケープされる必要があるだろうけれど、stringで用いることができるでしょう。
{{LSLC/ja|}}{{LSLC/ja|Types}}
{{RightToc}}


stringは'''+'''演算子を用いて結合させることができます。
stringはテキストデータです。
 
Stringの値はLSLテキストを定義するときに、ダブルクォーテーション(" ")て囲まれます。
 
文字列には、「NUL」文字を除いて任意の文字を使用できます。ただし、一部の文字はエスケープする必要がある場合があります(詳細についてはこのページの[[#Escape Codes|Escape Codes section]]を参照してください)。 「NUL」文字はUnicode値U+0000であり、LSL文字列に存在できません。したがって、例えばllUnescapeURL("%00")は空の文字列""を結果とします。
 
stringの長さは、利用可能な[[llGetFreeMemory/ja|スクリプトメモリ]]によってのみ制限されます(操作上の制約についてはこのページの[[#String_Length_Restraints|String Length Restraints]]セクションを参照してください)。ただし、Monoでは文字列はUTF-16を使用し、1文字あたり2つのメモリバイトを占有します。
 
stringは、'''+演算子'''を使用して連結(結合)できます。ただし、文字列をグローバル変数として定義する場合、+演算子は実行可能な命令として扱われ、コンパイラによって処理されないことに注意してください。連結は、実行可能なコード内でのみ行うことができます。つまり、ユーザー定義の関数内またはイベント内で行うことができます。
 
一部の文字列操作は、大文字と小文字の変換などの組み込み関数を使用して行うことができます。置換、左端取得、右端取得、テキストの装飾などの他の操作は、他のLSLユーザーによって開発された関数を使用して行う必要があります(これに関する例はこのページの一番下にあります)。
 
文字列の出力がユーザーの画面やメニューに表示される際のフォント、サイズ、太さ、色などについては、制御できません。画面に表示されるテキストの外観(たとえば、テキストからのチャットなど)は、ユーザーによって制御されます(ただし、デフォルトを変更するユーザーはあまり多くありません)。文字が大文字または小文字で表示されるかどうかのみを制御できます。
 
(表示されるテキストの色を制御できる唯一の場合は、[[llSetText/ja|Floating Text]]を使用する場合です。)


<div style="float:left">
{|{{Prettytable}}
|+'''エスケープコード'''
|-{{Hl2}}
!部分文字
!置換されるもの
|-
|| \t || 4スペース
|-
|| \n || 改行
|-
|| \" || ダブルクオーテーション
|-
|| \\ || バックスラッシュ
|}
</div>
{|
{|
|
|
String 例:
String 例:
<pre>"Hello Avatar!"
<source lang="lsl2">"Hello Avatar!"
"Yes"
"Yes"
"No"
"No"
Line 31: Line 30:
"Help " + "me"
"Help " + "me"
EOF
EOF
//以下の2つのstringは同じ値です。
//以下の2つのstringは同じ値です。
"I scream,\nyou scream,\nwe all scream,\nfor ice-cream!"
"I scream,\nyou scream,\nwe all scream,\nfor ice-cream!"
"I scream,
"I scream,
Line 37: Line 38:
we all scream,
we all scream,
for ice-cream!"
for ice-cream!"
</pre>
</source>
|}
|}
Note: エスケープコード(上記一覧)はスクリプトがコンパイルされるときに翻訳され、動いてる間はされません。
stringはコンパイルされたとき、結果としてスクリプト内部の\nを"改行"文字に変換するでしょう。ノートカード、チャット、httpその他から読み込むテキストはエスケープコードではチェックされませんから、ノートカードでの\n入力は自動で"改行"文字には変換されません。自らしなければなりませんが、本当に本当に必要な場合だけにすべきです。
Note: CとJavaや同様な言語からLSLに入った人は、始めたばかりの間はLSL stringのエスケープルールで混乱するでしょう。 LSLの"\n"の意味はllUnescapeURL("%0A")で、CとJavaに似てますが、"\t"の意味はllUnescapeURL("%09")よりllUnescapeURL("%20%20%20%20") が最適で、"\r"の意味はllUnescapeURL("%0D")よりも"r"が最適、などなど。


{{#vardefine:p_name_desc|変数名
{{#vardefine:p_name_desc|変数名
Line 52: Line 48:
== 変数: string {{LSL Param|name}}; ==
== 変数: string {{LSL Param|name}}; ==
<div style="padding: 0.5em;">
<div style="padding: 0.5em;">
<pre>string name;</pre>
<source lang="lsl2">string name;</source>
宣言するstring型の変数を'''name'''と名づけて、{{HoverText|""|空の string}}にします。
宣言するstring型の変数を'''name'''と名づけて、{{HoverText|""|空のstring}}にします。  
{|
{|
{{LSL DefineRow|variable|name|{{#var:p_name_desc}}}}
{{LSL DefineRow|variable|name|{{#var:p_name_desc}}}}
Line 62: Line 58:
== 変数: string {{LSL Param|name}} {{=}} {{LSL Param|value}}; ==
== 変数: string {{LSL Param|name}} {{=}} {{LSL Param|value}}; ==
<div style="padding: 0.5em;">
<div style="padding: 0.5em;">
<pre>string name = value;</pre>
<source lang="lsl2">string name = value;</source>
宣言するstring型の変数を'''name'''と名づけて、'''value'''の値をいれます。
宣言するstring型の変数を'''name'''と名づけて、'''value'''の値をいれます。  
{|
{|
{{LSL DefineRow|variable|name|{{#var:p_name_desc}}}}
{{LSL DefineRow|variable|name|{{#var:p_name_desc}}}}
Line 73: Line 69:
== [[Typecast/ja|型の変換]]: (string){{LSL Param|value_t|value}} ==
== [[Typecast/ja|型の変換]]: (string){{LSL Param|value_t|value}} ==
<div style="padding: 0.5em;">
<div style="padding: 0.5em;">
<pre>(string)value</pre>
<source lang="lsl2">(string)value</source>
'''value'''をstring型の値に変換します。
'''value'''をstring型の値に変換します。  
{|
{|
{{LSL DefineRow|expression|value|{{#var:p_value_t_desc}}}}
{{LSL DefineRow|expression|value|{{#var:p_value_t_desc}}}}
Line 84: Line 80:
== [[LSL Operators/ja|演算子]] ==  
== [[LSL Operators/ja|演算子]] ==  
<div style="padding: 0.5em;">
<div style="padding: 0.5em;">
ほかの情報は[[LSL Operators/ja|演算子]] を参照します。
ほかの情報は[[LSL Operators/ja|演算子]] を参照します。  
<div id="box" style="padding-left: 0.5em;padding-right: 0.5em;padding-bottom: 0.5em;">
<div id="box" style="padding-left: 0.5em;padding-right: 0.5em;padding-bottom: 0.5em;">
=== 結合: {{LSL Param|value|value1}} + {{LSL Param|value|value2}} ===
=== 結合: {{LSL Param|value|value1}} + {{LSL Param|value|value2}} ===
<pre>(value1 + value2)</pre>
<source lang="lsl2">(value1 + value2)</source>
入力での編集以外で、2つのstringを1つのstringに結合します。'''value2'''に '''value1'''を加えて、結果のstringに返します。
入力での編集以外で、2つのstringを1つのstringに結合します。'''value2'''に '''value1'''を加えて、結果のstringに返します。  
{|
{|
{{LSL DefineRow|expression|value1|{{#var:p_value_desc}}}}
{{LSL DefineRow|expression|value1|{{#var:p_value_desc}}}}
Line 97: Line 93:


=== 比較: {{LSL Param|value|value1}} <nowiki>==</nowiki> {{LSL Param|value|value2}} ===
=== 比較: {{LSL Param|value|value1}} <nowiki>==</nowiki> {{LSL Param|value|value2}} ===
<pre>(value1 == value2)</pre>
<source lang="lsl2">(value1 == value2)</source>
2つのstringを比較して、同じ長さで同じ文字なら1を返し、そうでなければ0を返します。
2つのstringを比較して、同じ長さで同じ文字なら1を返し、そうでなければ0を返します。 この演算子はCの<code>!strcmp('''value1''', '''value2''')</code>と極めて似たような働きをし、従ってCやJavaでの == 演算子と直観的に異なる故に、技術的に異なるものです。
この演算子はCの<code>!strcmp('''value1''', '''value2''')</code>と極めて似たような働きをし、従ってCやJavaでの == 演算子と直観的に異なる故に、技術的に異なるものです。
{|
{|
{{LSL DefineRow|expression|value1|{{#var:p_value_desc}}}}
{{LSL DefineRow|expression|value1|{{#var:p_value_desc}}}}
Line 107: Line 102:
<div id="box" style="padding-left: 0.5em;padding-right: 0.5em;padding-bottom: 0.5em;">
<div id="box" style="padding-left: 0.5em;padding-right: 0.5em;padding-bottom: 0.5em;">
=== 比較: {{LSL Param|value|value1}} != {{LSL Param|value|value2}} ===
=== 比較: {{LSL Param|value|value1}} != {{LSL Param|value|value2}} ===
<pre>(value1 != value2)</pre>
<source lang="lsl2">(value1 != value2)</source>
2つのstringを比較し、同じ長さで同じ文字であれば{{HoverText|zero|0}}を返し、そうでなければ0ではないものを返します。
2つのstringを比較し、同じ長さで同じ文字であれば{{HoverText|zero|0}}を返し、そうでなければ0ではないものを返します。 この演算子はCの<code>strcmp('''value1''', '''value2''')</code>と極めて似た働きをし、従ってCやJavaでの != 演算子と直観的に異なる故に、技術的に異なるものです。  
この演算子はCの<code>strcmp('''value1''', '''value2''')</code>と極めて似た働きをし、従ってCやJavaでの != 演算子と直観的に異なる故に、技術的に異なるものです。
{|
{|
{{LSL DefineRow|expression|value1|{{#var:p_value_desc}}}}
{{LSL DefineRow|expression|value1|{{#var:p_value_desc}}}}
Line 118: Line 112:


<div id="box">
<div id="box">
== エスケープコード ==
<div style="padding: 0.5em;">
{|{{Prettytable|style=float:left;}}
|+
|-{{Hl2}}
!Substring
!Replaced with
|-
|| \t || 4スペース
|-
|| \n || 改行
|-
|| \" || ダブルクオーテーション
|-
|| \\ || バックスラッシュ
|}
エスケープコードは、スクリプトがコンパイルされる際に変換されます。実行中には変換されません。コンパイラは、\と文字の他の組み合わせを\を削除して無視します。したがって、"\a"は"a"を意味します。
結果として、スクリプトがコンパイルされる際に含まれる文字列のみが、例えば \n が "改行" 文字に変換されます。ノートカード、チャット、HTTP、オブジェクトの名前や説明などから読み込んだテキストは、エスケープコードをチェックしないため、ノートカードに入力した \n は自動的に "改行" 文字には変換されません。何らかの理由で本当に必要な場合を除いて、自分で変換する必要があります。


CやJavaなどの言語からLSLに移行する人々は、最初はLSLの文字列エスケープルールが混乱するかもしれません。LSLでは、"\n"はCやJavaと同様に{{LSLG/ja|llUnescapeURL}}("%0A")を意味しますが、"\t"は{{LSLG/ja|llUnescapeURL}}("%09")ではなく{{LSLG/ja|llUnescapeURL}}("%20%20%20%20")を意味します。さらに、"\r"のエスケープコードは存在せず、"\r"は{{LSLG/ja|llUnescapeURL}}("%0D")ではなく単に "r" に変換されます。
エスケープされた文字の実行時の変換については、ユーザー関数[[Unescape]]を試してみてください。
</div></div>
<div id="box">
==アクセントのある文字==
<div style="padding: 0.5em;">
かつては、アクセントを持つ文字(例:「écoutez」)や英語では使用されない句読点(例:「¿Entiende?」)を含む文字列をスクリプトに含めると、スクリプトはコンパイルされない状態でした。
2008年の春から夏にかけて、スクリプトはテキスト文字列にアクセントを含めてもコンパイルできるようになりました。
つまり、以下のようになりました:
<source lang="lsl2">string hello = "Avatar écoutez";</source>
</div></div>
<div id="box">
==文字列の長さの制約==
<div style="padding: 0.5em;">
このページの冒頭で述べたように、単一の文字列の長さは、利用可能な[[llGetFreeMemory/ja|スクリプトメモリ]]によってのみ制限されます。ただし、いくつかの操作上の制約が存在します。多くの{{LSLGC|Communications/ja}}関数と一部の他の関数も、入力文字列に制限を課しています。これらの制約は、実行時にエラーメッセージが表示されたり、文字列が「静かに」切り詰められること(つまり、エラー通知もなく、それが行われたことを示す情報も提供されないこと)があります。
'''例'''
* [[llSay/ja|llSay]] -  llSayを使用する際、発言されるテキスト文字列は、LSOとMonoの両方で1024文字に切り詰められます(これはMono(UTF-16)では2048バイトのメモリスペースです)。
* [[llGetNotecardLine/ja|llGetNotecardLine]] - ノートカードから行を読み込む際、1023文字より長い行は静かに切り詰められます(以前は255文字でしたが、[https://releasenotes.secondlife.com/simulator/2021-10-25.565008.html SLS 565008] により増加しました)。
* [[llDialog/ja|llDialog]] - メッセージやボタンのテキストが長すぎる場合、その関数が呼び出されたときに非致命的なエラーが発生します。
'''Notes'''<br/>
この種の制約は常に文書化されており、文書に制約が記載されていない場合、その言語の通常の範囲外である既知の制約は存在しないことを意味します。
</div>
<div id="box">
==文字列のトリミング==
<div style="padding: 0.5em;">
以前は、文字列のトリミングはStrife Onizukaのライブラリなど、ユーザーが作成した関数を使用する必要がありました。
しかし、現在では、[[llStringTrim/ja|llStringTrim]]というネイティブのLSL関数が存在し、先頭および/または末尾のスペースを削除するために使用できます。ただし、文や文字列の中にユーザーが入力した余分なスペースを削除しないことに注意してください。また、他のネイティブのLSL関数も存在しません。
以下のコードは、文字列内のすべての二重スペースを削除し、先頭および末尾のスペースも削除します。ただし、かなりのメモリオーバーヘッドが必要です。
<source lang="lsl2">string myTrimmedText = llDumpList2String(llParseString2List(src, [" "], []), " ");</source>
チャット、ノートカード、プリムの名前や説明、または他の「自由な」ソースからユーザーのテキスト入力を受け入れる場合、それを処理を開始する前に必ず[[llStringTrim/ja|llStringTrim]]を行うことをお勧めします。
</div></div>
<div id="box">
== 例 ==
== 例 ==
<div style="padding: 0.5em;">
<div style="padding: 0.5em;">
<pre>
<source lang="lsl2">integer int = 48934;
integer int = 48934;
string str = (string)int;
string str = (string)int;
string str_2;
string str_2;
str_2 = str;
str_2 = str;</source>
</pre>
</div></div>
</div></div>
<div id="box">
<div id="box">
== よく用いる関数 ==
== よく用いる関数 ==
<div style="padding: 0.5em;">
<div style="padding: 0.5em;">
=== [[Library_Combined_Library|CombinedLibrary]]のString関数 ===
=== ユーザが作成したユーティリティ関数 ===
{|
これらの関数は、組み込みのLSL関数では対応していない操作を実行するために、LSLユーザーによって作成され、提供されました。
{{LSL DefineRow||[[Library_Combined_Library#str_replace|str_replace]]|全ての対象string内の、stringインスタンスとその他のstringを置換します。}}
 
{{LSL DefineRow||[[Library_Combined_Library#Trim|TrimRight]]|stringの右端から文字の余計な空白を削除します。}}
{|{{Prettytable}}
{{LSL DefineRow||[[Library_Combined_Library#Trim|TrimLeft]]|stringの左端から文字の余計な空白を削除します。}}
|+
{{LSL DefineRow||[[Library_Combined_Library#Trim|TrimBoth]]|stringの両端から文字の余計な空白を削除します。}}
|-{{Hl2}}
!function
!purpose
|-
|| [[Chr]] || 指定されたコードのUnicode文字を返します。[[Ord]]関数とも関連があります。
|-
|| [[Float2String]] || 浮動小数点数を整形されたテキスト形式で出力し、オプションで丸めることができます。
|-
|| [[Left]] || 指定された区切り文字の左側のテキストを返します。
|-
|| [[Like]] || ある単語が別の単語の一部と一致するかどうかを確認します。
|-
|| [[Ord]] || 文字の順序(Unicodeコード)を返します。[[Chr]]関数とも関連があります。
|-
|| [[RandomString]] || ランダムな文字列を生成します。
|-
|| [[RemoveHTMLTags]] || 文字列からHTMLタグ(および改行文字)を削除します。
|-
|| [[Right]] || 指定された区切り文字の右側のテキストを返します。
|-
|| [[Library_Combined_Library#str_replace|str_replace]] || 全ての対象string内の、stringインスタンスとその他のstringを置換します。  
|-
|| [[Stristr]] || 指定されたneedle文字列の最初の出現箇所からhaystackの末尾までの文字列を返します。
|-
|| [[SplitLine]] || '改行'エスケープコードをstringの特定の箇所に挿入します。
|-
|| [[Library_Combined_Library#TrimRight|TrimRight]] || stringの右端から文字の余計な空白を削除します。
|-
|| [[Library_Combined_Library#TrimLeft|TrimLeft]] || stringの左端から文字の余計な空白を削除します。  
|-
|| [[Library_Combined_Library#TrimBoth|TrimBoth]] || stringの両端から文字の余計な空白を削除します。
|-
|| [[WrapText]] || テキストを指定した行の長さに分割します。
|}
|}
=== ===
 
{|
=== スクリプトライブラリ内のテキスト関係のスクリプト ===
{{LSL DefineRow||[[Examples|SplitLine]]|'改行'エスケープコードをstringの特定の箇所に挿入します。}}
{| {{Prettytable}}
|-
|{{Hl2}}| '''スクリプト名'''
|{{Hl2}}| '''製作者'''
|{{Hl2}}| '''説明'''
|-
||[[ParseString2List]]
||[[User:Strife Onizuka|Strife Onizuka]]
||[[llParseString2List/ja|llParseString2List]]および[[llParseStringKeepNulls/ja|llParseStringKeepNulls]]と同じ機能を提供しますが、8つ以上の区切り文字やセパレータが必要な場合に使用します。したがって、8つ以上のセパレータや区切り文字がある場合、[[llParseString2List/ja|llParseString2List]]および[[llParseStringKeepNulls/ja|llParseStringKeepNulls]]関数の呼び出しを[[Parse_String_To_List|ParseString2List]]に置き換えることができます。
|-
 
||[[String Compare]]
||[[User:Xaviar Czervik|Xaviar Czervik]]
||2つの文字列を比較し、それらが同じ場合に1、-1、または0を確実に返します。
|-
||[[XyText 1.5|XyText]]
||[[User:Xylor Baysklef|Xylor Baysklef]]
|| プリムにテキスト(最大10文字)を表示します。必要なだけ多くのプリムを使用できます。
|-
||[[XyyyyzText|XyyyyzText]]
||[[User:Criz Collins|Criz Collins]]
|| プリムにテキスト(最大10文字)を表示します。1つの単一のテキストではなく、各行ごとに異なるテキストを表示し、次の行に分割されます。詳細はこちらを参照してください http://screencast.com/t/1wMLujLcEO
|-
||[[XyzzyText|XyzzyText]]
||[[User:Thraxis Epsilon|Thraxis Epsilon]] and [[User:Gigs Taggart|Gigs Taggart]]
|| プリムにテキスト(最大10文字)を表示します。XyTextよりも効率的です。
|}
|}
</div></div>
</div>

Latest revision as of 14:56, 3 October 2023

stringはテキストデータです。

Stringの値はLSLテキストを定義するときに、ダブルクォーテーション(" ")て囲まれます。

文字列には、「NUL」文字を除いて任意の文字を使用できます。ただし、一部の文字はエスケープする必要がある場合があります(詳細についてはこのページのEscape Codes sectionを参照してください)。 「NUL」文字はUnicode値U+0000であり、LSL文字列に存在できません。したがって、例えばllUnescapeURL("%00")は空の文字列""を結果とします。

stringの長さは、利用可能なスクリプトメモリによってのみ制限されます(操作上の制約についてはこのページのString Length Restraintsセクションを参照してください)。ただし、Monoでは文字列はUTF-16を使用し、1文字あたり2つのメモリバイトを占有します。

stringは、+演算子を使用して連結(結合)できます。ただし、文字列をグローバル変数として定義する場合、+演算子は実行可能な命令として扱われ、コンパイラによって処理されないことに注意してください。連結は、実行可能なコード内でのみ行うことができます。つまり、ユーザー定義の関数内またはイベント内で行うことができます。

一部の文字列操作は、大文字と小文字の変換などの組み込み関数を使用して行うことができます。置換、左端取得、右端取得、テキストの装飾などの他の操作は、他のLSLユーザーによって開発された関数を使用して行う必要があります(これに関する例はこのページの一番下にあります)。

文字列の出力がユーザーの画面やメニューに表示される際のフォント、サイズ、太さ、色などについては、制御できません。画面に表示されるテキストの外観(たとえば、テキストからのチャットなど)は、ユーザーによって制御されます(ただし、デフォルトを変更するユーザーはあまり多くありません)。文字が大文字または小文字で表示されるかどうかのみを制御できます。

(表示されるテキストの色を制御できる唯一の場合は、Floating Textを使用する場合です。)

String 例:

"Hello Avatar!"
"Yes"
"No"
"It's 10 o'clock."
"I am 21 years old!"
"Help " + "me"
EOF

//以下の2つのstringは同じ値です。

"I scream,\nyou scream,\nwe all scream,\nfor ice-cream!"
"I scream,
you scream,
we all scream,
for ice-cream!"


変数: string name;

string name;

宣言するstring型の変数をnameと名づけて、""にします。

• variable name 変数名

変数: string name = value;

string name = value;

宣言するstring型の変数をnameと名づけて、valueの値をいれます。

• variable name 変数名
• expression value string 要素もしくは定型値

型の変換: (string)value

(string)value

valueをstring型の値に変換します。

• expression value 要素もしくは定型値

演算子

ほかの情報は演算子 を参照します。

結合: value1 + value2

(value1 + value2)

入力での編集以外で、2つのstringを1つのstringに結合します。value2value1を加えて、結果のstringに返します。

• expression value1 string 要素もしくは定型値
• expression value2 string 要素もしくは定型値

比較: value1 == value2

(value1 == value2)

2つのstringを比較して、同じ長さで同じ文字なら1を返し、そうでなければ0を返します。 この演算子はCの!strcmp(value1, value2)と極めて似たような働きをし、従ってCやJavaでの == 演算子と直観的に異なる故に、技術的に異なるものです。

• expression value1 string 要素もしくは定型値
• expression value2 string 要素もしくは定型値

比較: value1 != value2

(value1 != value2)

2つのstringを比較し、同じ長さで同じ文字であればzeroを返し、そうでなければ0ではないものを返します。 この演算子はCのstrcmp(value1, value2)と極めて似た働きをし、従ってCやJavaでの != 演算子と直観的に異なる故に、技術的に異なるものです。

• expression value1 string 要素もしくは定型値
• expression value2 string 要素もしくは定型値

エスケープコード

Substring Replaced with
\t 4スペース
\n 改行
\" ダブルクオーテーション
\\ バックスラッシュ

エスケープコードは、スクリプトがコンパイルされる際に変換されます。実行中には変換されません。コンパイラは、\と文字の他の組み合わせを\を削除して無視します。したがって、"\a"は"a"を意味します。 結果として、スクリプトがコンパイルされる際に含まれる文字列のみが、例えば \n が "改行" 文字に変換されます。ノートカード、チャット、HTTP、オブジェクトの名前や説明などから読み込んだテキストは、エスケープコードをチェックしないため、ノートカードに入力した \n は自動的に "改行" 文字には変換されません。何らかの理由で本当に必要な場合を除いて、自分で変換する必要があります。

CやJavaなどの言語からLSLに移行する人々は、最初はLSLの文字列エスケープルールが混乱するかもしれません。LSLでは、"\n"はCやJavaと同様にllUnescapeURL("%0A")を意味しますが、"\t"はllUnescapeURL("%09")ではなくllUnescapeURL("%20%20%20%20")を意味します。さらに、"\r"のエスケープコードは存在せず、"\r"はllUnescapeURL("%0D")ではなく単に "r" に変換されます。

エスケープされた文字の実行時の変換については、ユーザー関数Unescapeを試してみてください。

アクセントのある文字

かつては、アクセントを持つ文字(例:「écoutez」)や英語では使用されない句読点(例:「¿Entiende?」)を含む文字列をスクリプトに含めると、スクリプトはコンパイルされない状態でした。

2008年の春から夏にかけて、スクリプトはテキスト文字列にアクセントを含めてもコンパイルできるようになりました。

つまり、以下のようになりました:

string hello = "Avatar écoutez";

文字列の長さの制約

このページの冒頭で述べたように、単一の文字列の長さは、利用可能なスクリプトメモリによってのみ制限されます。ただし、いくつかの操作上の制約が存在します。多くのCommunications/ja関数と一部の他の関数も、入力文字列に制限を課しています。これらの制約は、実行時にエラーメッセージが表示されたり、文字列が「静かに」切り詰められること(つまり、エラー通知もなく、それが行われたことを示す情報も提供されないこと)があります。

  • llSay - llSayを使用する際、発言されるテキスト文字列は、LSOとMonoの両方で1024文字に切り詰められます(これはMono(UTF-16)では2048バイトのメモリスペースです)。
  • llGetNotecardLine - ノートカードから行を読み込む際、1023文字より長い行は静かに切り詰められます(以前は255文字でしたが、SLS 565008 により増加しました)。
  • llDialog - メッセージやボタンのテキストが長すぎる場合、その関数が呼び出されたときに非致命的なエラーが発生します。

Notes
この種の制約は常に文書化されており、文書に制約が記載されていない場合、その言語の通常の範囲外である既知の制約は存在しないことを意味します。

文字列のトリミング

以前は、文字列のトリミングはStrife Onizukaのライブラリなど、ユーザーが作成した関数を使用する必要がありました。

しかし、現在では、llStringTrimというネイティブのLSL関数が存在し、先頭および/または末尾のスペースを削除するために使用できます。ただし、文や文字列の中にユーザーが入力した余分なスペースを削除しないことに注意してください。また、他のネイティブのLSL関数も存在しません。

以下のコードは、文字列内のすべての二重スペースを削除し、先頭および末尾のスペースも削除します。ただし、かなりのメモリオーバーヘッドが必要です。

string myTrimmedText = llDumpList2String(llParseString2List(src, [" "], []), " ");

チャット、ノートカード、プリムの名前や説明、または他の「自由な」ソースからユーザーのテキスト入力を受け入れる場合、それを処理を開始する前に必ずllStringTrimを行うことをお勧めします。

integer int = 48934;
string str = (string)int;
string str_2;
str_2 = str;

よく用いる関数

ユーザが作成したユーティリティ関数

これらの関数は、組み込みのLSL関数では対応していない操作を実行するために、LSLユーザーによって作成され、提供されました。

function purpose
Chr 指定されたコードのUnicode文字を返します。Ord関数とも関連があります。
Float2String 浮動小数点数を整形されたテキスト形式で出力し、オプションで丸めることができます。
Left 指定された区切り文字の左側のテキストを返します。
Like ある単語が別の単語の一部と一致するかどうかを確認します。
Ord 文字の順序(Unicodeコード)を返します。Chr関数とも関連があります。
RandomString ランダムな文字列を生成します。
RemoveHTMLTags 文字列からHTMLタグ(および改行文字)を削除します。
Right 指定された区切り文字の右側のテキストを返します。
str_replace 全ての対象string内の、stringインスタンスとその他のstringを置換します。
Stristr 指定されたneedle文字列の最初の出現箇所からhaystackの末尾までの文字列を返します。
SplitLine '改行'エスケープコードをstringの特定の箇所に挿入します。
TrimRight stringの右端から文字の余計な空白を削除します。
TrimLeft stringの左端から文字の余計な空白を削除します。
TrimBoth stringの両端から文字の余計な空白を削除します。
WrapText テキストを指定した行の長さに分割します。

スクリプトライブラリ内のテキスト関係のスクリプト

スクリプト名 製作者 説明
ParseString2List Strife Onizuka llParseString2ListおよびllParseStringKeepNullsと同じ機能を提供しますが、8つ以上の区切り文字やセパレータが必要な場合に使用します。したがって、8つ以上のセパレータや区切り文字がある場合、llParseString2ListおよびllParseStringKeepNulls関数の呼び出しをParseString2Listに置き換えることができます。
String Compare Xaviar Czervik 2つの文字列を比較し、それらが同じ場合に1、-1、または0を確実に返します。
XyText Xylor Baysklef プリムにテキスト(最大10文字)を表示します。必要なだけ多くのプリムを使用できます。
XyyyyzText Criz Collins プリムにテキスト(最大10文字)を表示します。1つの単一のテキストではなく、各行ごとに異なるテキストを表示し、次の行に分割されます。詳細はこちらを参照してください http://screencast.com/t/1wMLujLcEO
XyzzyText Thraxis Epsilon and Gigs Taggart プリムにテキスト(最大10文字)を表示します。XyTextよりも効率的です。