Difference between revisions of "LlStringLength/ja"

From Second Life Wiki
Jump to navigation Jump to search
m (カテゴリ変更)
 
(3 intermediate revisions by 2 users not shown)
Line 4: Line 4:
|func_footnote
|func_footnote
|func_desc
|func_desc
|return_text='''str''' の文字数
|return_text='''str''' にある文字の数 (NULL文字をカウントしない) 
|spec
|spec
|caveats=
|caveats=
* 末尾の文字のインデックス番号は文字列長と一致しません。
*末尾の文字のインデックス番号は文字列長と一致しません。
** 一文字目のインデックス番号はゼロだからです。
**文字のインデックスは 0 から始まります (先頭の文字のインデックスが 0 になります) 。
* 終端の null は文字数に含みません。
* 全角文字も一文字として数えます。
|constants
|constants
|examples=
|examples=
<lsl>
<source lang="lsl2">
// 以下のような設定だとします:  
// 前提:  
//    オブジェクト名: LSLWiki
//    オブジェクト名: LSLWiki
//    スクリプト名: _lslwiki
//    スクリプト名: _lslwiki
Line 29: Line 27:
     }
     }
}
}
</lsl>
</source>
----
<source lang="lsl2">
integer getStringBytes(string msg){
    string s = llEscapeURL(msg);
    string t = (string)llParseString2List(s,["%"],[]);
    return llStringLength(t) * 2 - llStringLength(s);
}
</source>
*複数バイト文字を含む文字列のバイト数を得る
:msg と s のバイト数を次のように書くと:
::mb(msgのバイト数) = nb(置き換わらないバイト数) + bb(置き換わる前のバイト数)
::sb(sのバイト数) = nb + ab(置き換わった後のバイト数)
:ここで、
::ab = bb * 3 (各1バイト例えば '#' は、置き換わって 3 バイトの "%23" に)
:なので、
::mb = sb - bb * 2
:s 中の置き換わった全部が "%xx"(x:0-9またはA-F) の形になっているので、bb = s の中の '%'の数
:'%' を数えるため、s から '%' を除いた文字列 t を作れば:
::bb = sb - tb(tのバイト数)
:(s を llParseString2List()で'%'を除きながらリストに分解して、型キャストでまた文字列に戻して t とします。)
:これで求める答は:
::mb = sb - (sb - tb) * 2 = tb * 2 - sb
*参考ブログ:
:http://snumaw.blogspot.jp/2009/01/lsl-lldialog.html
:http://jinko.slmame.com/e602732.html
 
|helpers
|helpers
|also_functions={{LSL DefineRow||{{LSLG/ja|llGetListLength}}|}}
|also_functions={{LSL DefineRow||{{LSLG/ja|llGetListLength}}|}}
Line 39: Line 63:
|negative_index
|negative_index
|sort=StringLength
|sort=StringLength
|cat1=String/ja
|cat1=String
|cat2
|cat2
|cat3
|cat3
|cat4
|cat4
}}
}}

Latest revision as of 14:37, 25 February 2016

要約

関数: integer llStringLength( string str );

str にある文字の数 (NULL文字をカウントしない) を integer で返します。

• string str

警告

  • 末尾の文字のインデックス番号は文字列長と一致しません。
    • 文字のインデックスは 0 から始まります (先頭の文字のインデックスが 0 になります) 。
All Issues ~ Search JIRA for related Bugs

サンプル

// 前提: 
//    オブジェクト名: LSLWiki
//    スクリプト名: _lslwiki

default
{
    state_entry()
    {
        string HowLongAmI = "123";
        integer strlen = llStringLength(HowLongAmI);
        llOwnerSay( "'" + HowLongAmI + "' は " +(string) strlen + " 文字です。");
        // オブジェクト LSLWiki のオーナーには以下のように表示されます。
        // LSLWiki: '123' は 3 文字です。
    }
}

integer getStringBytes(string msg){
    string s = llEscapeURL(msg);
    string t = (string)llParseString2List(s,["%"],[]);
    return llStringLength(t) * 2 - llStringLength(s);
}
  • 複数バイト文字を含む文字列のバイト数を得る
msg と s のバイト数を次のように書くと:
mb(msgのバイト数) = nb(置き換わらないバイト数) + bb(置き換わる前のバイト数)
sb(sのバイト数) = nb + ab(置き換わった後のバイト数)
ここで、
ab = bb * 3 (各1バイト例えば '#' は、置き換わって 3 バイトの "%23" に)
なので、
mb = sb - bb * 2
s 中の置き換わった全部が "%xx"(x:0-9またはA-F) の形になっているので、bb = s の中の '%'の数
'%' を数えるため、s から '%' を除いた文字列 t を作れば:
bb = sb - tb(tのバイト数)
(s を llParseString2List()で'%'を除きながらリストに分解して、型キャストでまた文字列に戻して t とします。)
これで求める答は:
mb = sb - (sb - tb) * 2 = tb * 2 - sb
  • 参考ブログ:
http://snumaw.blogspot.jp/2009/01/lsl-lldialog.html
http://jinko.slmame.com/e602732.html

関連項目

関数

•  llGetListLength

特記事項

Search JIRA for related Issues

Signature

function integer llStringLength( string str );
この翻訳は 原文 と比べて古いですか?間違いがありますか?読みにくいですか?みんなで 修正 していきましょう! (手順はこちら)
この項目はあなたにとって参考にならない項目ですか?もしかしたらLSL Wikiの関連した項目が参考になるかもしれません。