文字列値

String クラスは、文字列の特性を定義します。文字列の長さに制限はありません。

リテラル

"<characters>"

文字列リテラルの詳細については、「文字列リテラル」を参照してください。

コンストラクタ

<value> as string

任意の値を文字列に変換します。

プロパティ

<string>.count: Integer, read-only

関数内の文字数です。

演算子

<string> + <string>

2 つの文字列を結合して新しい文字列を返します。

<string> == <string>
<string> != <string>
<string> > <string>
<string> < <string>
<string> >= <string>
<string> <= <string>

標準の字句文字列を比較します。

大文字と小文字を区別しない同等比較を実行するには、小文字の比較を実行する stricmp() メソッドを使用してください。

<string>[<index_number>]

指定したインデックスの文字を 1 つの文字列として返します。インデックスは 1 から始まります。

<string>[<index_number>]= <single_character_string>

指定したインデックスの文字を指定された文字に設定します。

<string>as<class>

指定されたクラスのインスタンスに文字列を変換します。文字列は、as 演算子を使用して Name 値に変換できます。

"Foo" as name-- returns #foo 

また、as 演算子を使用して文字列を数値に変換することもできます。

"123.4" as float-- returns 123.4 

Number、Float および Integer は、ターゲットの Number クラスとして使用できます。Number を使用する場合、文字列内の数値の構文に適切なクラスが使用されます。

文字列は、as 演算子を使用して StringStream 値に変換できます。

"$box01" as stringstream-- returns the string as a stringstream 

文字列を StringStream 値に変換すると、MAXScript のテキスト ファイル入出力操作を使って文字列を読み込めるようになります。StringStream の詳細については、「StringStream 値」を参照してください。

3ds Max 2022.1 Update 以降で使用可能です。

as 演算子を使用して、文字列を点の値(point2、point3、point4)に変換できます。

注:

文字列は、点の値のリテラル形式に一致する必要があります。一致しない場合は、undefined が返されます。

"[1,2]" as point2
--> [1,2]
"[1,2,3]" as point3
--> [1,2,3]
"[1,2,3,4]" as point4
--> [1,2,3,4]
" \t [1,2,3,4] \t " as point4
--> [1,2,3,4] - whitespace at the beginning and end of the string is allowed
"[1,2,3]" as point4
--> undefined - the string must match the target format

メソッド

<string>copy <string>

文字列値の新しいコピーを作成し、返します。

newstr = copy oldstr

新しい値には、コピーされた文字列の内容のコピーが含まれ、コピーされた文字列からは独立しています。

free <string>

ガベージ コレクションを待たずに、文字列値によって使用されているメモリを解放します。

3ds Max 9 以降で使用可能です。

s = "ABCD"
--> "ABCD"
s
--> "ABCD"
free s
--> OK
s
--> ""
execute <string>

文字列の内容を MAXScript 式としてコンパイルおよび評価し、評価結果を返します。

注:

3ds Max 2022.1 Update では、MAXScript 式の評価には、安全でないコマンドを常にブロックするsafeExecute() の方法(下記)が推奨されます。

execute"2 + 2"-- yields the value 4
str ="$foo.ffd_2x2x2.control_point_"+
n as string +" = [1,1,1]"
execute str

execute() 呼び出しの結果は、文字列引数の最後の式の結果になります。

execute() を使用すると、計算された名前を使ってオブジェクトにアクセスできます。

obj = execute ("$foo/"+ child_name)

変数 child_name の名前が付いた $foo の子を取得します。

次により複雑な例を示します。

side ="left"
finger = 2
limb ="arm"
obj = execute ("$torso/"+ limb +"/"+
side +"/finger/"+
finger as string)

評価された文字列で使用された変数のスコープはグローバルで、execute() メソッドが実行されるときに適用されるスコープではありません。そのため、関数、スクリプト化されたユーティリティ、またはスコープがグローバルではない任意の位置で execute() を呼び出す場合は、実行する文字列で使用される変数のスコープを明示的に指定する必要があります。次の例では、変数のスコープ posObjmyUtil ユーティリティではローカルであるため、文字列には myUtil のスコープとなる変数名を指定する必要があります。

Utility myUtil"My Utility"
(
local posObj
fn test obj =
(
local i, j, thisCont
thisCont=execute ("myUtil.posObj.'"+j+"'pos.controller")
)
)

通常、ロールアウト、ユーティリティ、ツール、プラグインのトップレベルのローカルを除いて、オブジェクトの外側からローカルにアクセスすることはできません。これは、ローカルが半永久的で、オブジェクトとともに格納されているからです。関数パラメータとローカルはダイナミックでスタックベースですが、関数定義のプロパティとしてアクセスすることはできません。

変数のスコープについては、「変数のスコープ」および「外部コードからロールアウトのローカルおよび他の項目へのアクセス」を参照してください。

safeExecute <string> [ignoreSSSEState:<boolean>]

この関数は execute() と同じですが、[セーフ シーン スクリプトの実行](Safe Scene Script Execution)が有効であるかのようにスクリプト文字列を評価します(実際に有効であるかどうかに関係なく)。これは、安全でないすべてのコマンドがブロックされることを意味します(『_3ds Max ユーザ ガイド_』の「セーフ シーン スクリプトの実行」のトピックで、ブロックされるコマンドのリストを参照してください)。この方法により、悪意のあるコードがスクリプトに挿入される可能性が緩和されます。

3ds Max 2024.1 Update の新機能: オプションのキーワード引数 ignoreSSSEStatetrue の場合、[セーフ シーン スクリプトの実行](Safe Scene Script Execution)が有効になっているかどうかに関係なく、制限されたセキュリティ設定を使用して関数が実行されるように指定します。既定値は false です。

3ds Max 2022.1 Update 以降で使用可能です。

<Point2> GetTextExtent<string>

Point2 値を返します。コマンド パネルに表示された場合、これには文字列のサイズ(ピクセル単位)が含まれます。

<integer>findString<string> <search_string>

string 内での search_string のインデックスを返します。見つからない場合は、undefined を返します。

findString "Thanks for all the fish!" "all" -- returns 12 
<array of strings>filterString <string> <token_string> [splitEmptyTokens:<boolean>]

stringtoken_string に基づいて解析し、文字列の配列を返します。filterString は、入力 stringtoken_string で指定された文字に基づいてサブ文字列に分割し、各サブ文字列を配列のメンバとして返します。token_string は、「区切り文字」のリストです。文字列がスキャンされると、見つかったトークンの文字列がサブ文字列の開始とみなされます。この関数は、ファイルの読み込み/書き出しスクリプトや手動解析のタイプで使用すると便利です。

filterString "MAX Script, is-dead-funky" ", -"

次のような結果が返されます。

#("MAX","Script","is","dead","funky")

splitEmptyTokensfalse の場合、または指定されない場合は、連続トークンが 1 つのトークンとして処理され、文字列の先頭か末尾のトークンが無視されます。splitEmptyTokenstrue にすると、見つかったそれぞれのトークンが出力の文字列要素となり、上で無視された場合の文字列要素は空の文字列になります。3ds Max 8 以降で使用可能です。

s = "One\t\tThree\tFour"
tokens = filterString s "\t"
--> #("One", "Three", "Four")
tokens = filterString s "\t" splitEmptyTokens:true
--> #("One", "", "Three", "Four")
s ="\t\t\tOne\t\t\tThree\tFour\t\t\t"
tokens = filterString s "\t"
--> #("One", "Three", "Four")
tokens = filterString s "\t" splitEmptyTokens:true
--> #("", "", "", "One", "", "", "Three", "Four", "", "", "")
<string>replace <string> <from_integer> <length_integer> <new_string>

string 内の開始インデックスが from_integer、長さが length_integer のサブ文字列を任意の長さの new_string.new_string で置き換えた新しい文字列を返します。from_integerlength_integer の合計は、string の長さよりも短くなる必要があります。

s="1234567890"
s1=replace s 5 3 "inserted string"

戻り値:

"1234inserted string890"
<string>substring <string> <from_integer> <length_integer>

string 内の開始インデックスが from_integer、長さが length_integer のサブ文字列を新しい文字列として返します。from_integerlength_integer の合計が string の長さより大きい場合、ソース文字列の最大文字数が含まれた、それよりも短い文字列が返されます。負の値が length_integer に指定された場合、from_integer から始まる文字列の残りが返されます。

s ="Balerofon"
ss = substring s 5 3-- returns "rof"
ss = substring s 5 -1-- returns "rofon"
ss = substring s 5 100-- returns "rofon" 
<boolean>matchPattern <string> pattern:<pattern_string> [ignoreCase:<boolean>]

string がワイルド カード pattern_string に一致する場合は true を、一致しない場合は false を返します。ignoreCase:false が指定されている場合を除いて、比較の際に大文字と小文字は区別されません。

注: matchPattern()findString() よりもかなり高速に実行されるため、可能であればこちらを使用してください。

s="text1"
matchPattern s pattern:"text?"-- returns true
matchPattern s pattern:"T*"-- returns true
matchPattern s pattern:"T*"ignoreCase:false-- returns false
matchPattern s pattern:"s*"-- returns false 
<string>append <string1> <string2>

string2string1 に追加します。string1 を順番に演算し、結果として string1 を返します。

注:

このメソッドでは string1 を順番に演算するため、次のコードを実行後、s1 および s2 の両方が同じ文字列値をポイントし続けます。

s1 = "aa"
s2 = s1
append s1 "bb"
s1-- returns "aabb"
s2-- returns "aabb"and not "aa" 

通常、多くの小さな文字列から大きな文字列を増分して作成する場合に付加を使用します。文字列はインプレースで処理されるため、メモリ使用量が大幅に削減される可能性があります。これは、中間文字列値が次のガベージ コレクションまでメモリ内に残らないためです。

<integer>stricmp <string1> <string2>

3ds Max 6 以降では、このメソッドを使用して、string1 と string2 の小文字を比較します。

string1 が string2 より小さい場合は 0 (ゼロ)より小さい整数値、string1 と string2 が同じ場合には 0 (ゼロ)、string1 が string2 より大きい場合は 1 より大きい整数値が返されます。

toUpper <string>

大文字に変換された新しい文字列値を返します。3ds Max 2008 以降で使用可能です。従来、Avguard 機能拡張として提供されていた機能です。

toUpper "so long and thanks for all the scripts"

結果:

"SO LONG AND THANKS FOR ALL THE SCRIPTS"
toLower <string>

小文字に変換された新しい文字列値を返します。3ds Max 2008 以降で使用可能です。従来、Avguard 機能拡張として提供されていた機能です。

toLower "Life, The Universe And Everything"

結果:

"life, the universe and everything"
substituteString <source_string> <from_string> <to_string> 

<source_string> 内のすべての <from_string> のオカレンスを <to_string> に置き換えて、新しい文字列を返します。3ds Max 2008 以降で使用可能です。従来、Avguard 機能拡張として提供されていた機能です。

s1 = "Truth, Justice And The American Way"
s2 = "The American Way"
s3 = "All That Stuff"
s4 = substituteString s1 s2 s3

結果:

"Truth, Justice And All That Stuff"
replace_LF_with_CRLF <string>

入力文字列内の改行(LF)を、先行する文字が復帰改行(CR)である場合を除き、すべて復帰改行/改行(CR/LF)に置き換えて新しい文字列を返します。3ds Max 2008 以降で使用可能です。従来、Avguard 機能拡張として提供されていた機能です。

replace_CRLF_with_LF <string>

入力文字列内の復帰改行/改行(CR/LF)を改行(LF)に置き換えて、新しい文字列を返します。3ds Max 2008 以降で使用可能です。従来、Avguard 機能拡張として提供されていた機能です。

次のスクリプトは、String クラスの各種のリテラル、コンストラクタ、プロパティ、演算子、メソッドの使い方を示します。

-- strings test bed
fn uppercase instring =-- beginning of function definition
( local upper, lower, outstring-- declare variables as local
upper="ABCDEFGHIJKLMNOPQRSTUVWXYZ"-- set variables to literals
lower="abcdefghijklmnopqrstuvwxyz"

-- create an unique copy of the string referenced by instring,
-- and store reference to unique copy in outstring
outstring=copy instring

-- increment from 1 to number of character in string
for i=1 to outstring.count do

-- see if the single character at index i in outstring
-- is present instring lower
-- If so, j equals position in string lower.
-- If not, j equals undefined
( j=findString lower outstring[i]

-- if character was found in lower,
-- replace with corresponding character in upper:
if (j != undefined) do outstring[i]=upper[j]
)
outstring-- value will be returned as function result
)-- end of fn uppercase

s1="AbCdEfGh"-- set variable to literal
s2=uppercase s1-- call function uppercase, passing s1 as parameter
if s1 == s2 do print "strings s2 and s3 are the same"-- compare strings
if s1 != s2 do print "strings s1 and s2 are different"

theObject="sphere"-- set variable to literal
theRadius= (random 10. 100.) as string-- convert number to string
-- concatenate strings and execute string
myObject=execute (theObject +" radius:"+ theRadius)

出力:

uppercase()-- result to function definition
"AbCdEfGh"-- result of line 24
"ABCDEFGH"-- result of line 25
undefined-- result of line 26 - stringsnot equal,
-- and no else expression in if expression
"strings s1 and s2 are different"-- output from line 27
"strings s1 and s2 are different"-- result of line 27
"sphere"-- result of line 29
"75.4091"-- result of line 30
$Sphere:Sphere001 @ [0.000000,0.000000,0.000000]-- result of line 32. Execute function
-- created a sphere object