文字列・配列
MaxScript チートシート の章一覧
スクリプトの下ごしらえでよく使う、文字列と配列の操作です。MaxScript 特有の名前・記法に絞って収録します。
文字列の基本
"Hello" + " " + "World" -- 連結
"abc".count -- 文字数
toUpper "abc" -- "ABC"
toLower "ABC" -- "abc"
(42 as string) -- 数値→文字列 → "42"
("3.14" as float) -- 文字列→数値
検索・置換・分割
findString "abcdef" "cd" -- 見つかった開始位置(無ければ undefined)
substituteString "a_b_c" "_" "-" -- "a-b-c"(全置換)
replace "abcdef" 2 3 "XYZ" -- 位置2から3文字を置換 → "aXYZef"
filterString "a, b, c" ", " -- #("a","b","c")(区切り文字で分割)
trimLeft " abc" -- 左の空白を除去
trimRight "abc " -- 右の空白を除去
trimRight "Box001" "0123456789" -- 末尾の数字を除く → "Box"
- ⚠️
filterStringの第2引数は 区切り文字の集合 です。", "はカンマと空白の両方が区切りになります。 - また、区切りが連続しても空文字列は返りません(
"a,,b"→#("a","b"))。空要素も欲しいときはsplitEmptyTokens:trueを付けます。
数値の整形(ゼロ埋め・桁数)
formattedPrint 5 format:"03d" -- "005"(3桁ゼロ埋め)
formattedPrint 3.14159 format:".2f" -- "3.14"(小数2桁)
"Part_" + (formattedPrint i format:"03d") -- 連番名 Part_001
format:は C 言語の printf 書式です。dが整数、fが小数、03は「3 桁でゼロ埋め」、.2は「小数 2 桁」です。
文字列を組み立てる(format / stringStream)
format "% を % 回処理\n" "Box" 3 -- リスナーに出力(% が引数で埋まる)
ss = stringStream "" -- 文字列バッファ(何行も format ... to:ss で書きため、最後に ss as string で 1 つの文字列にする。ログやファイル出力の組み立てに使う)
format "name=%, id=%\n" $.name 1 to:ss -- バッファに書く
ss as string -- 文字列として取り出す
formatの%は 引数で順に置換 されます。to:で出力先(ファイル・stringStream)を変えられます。formatは改行を付けないので、行末に\nを書きます。
配列の基本
a = #(10, 20, 30)
a[2] -- 20(1 始まり)
a.count -- 3
append a 40 -- 末尾に追加(破壊的)
a[6] = 99 -- 要素数を超える添字に代入すると配列が伸び、間(a[5])は undefined になる
deleteItem a 1 -- 1 番目を削除
findItem a 30 -- 値 30 のインデックス(無ければ 0)
b = copy a -- 別の配列を作る(a は変わらない)
- ⚠️ インデックスは 1 始まり。
findItemは見つからないと0(undefinedではない)を返します。
集める・絞る・並べる
a = #(10, 20, 30)
for x in a where x > 15 collect x -- 条件で集める → #(20,30)
for x in a collect (x * 2) -- 変換して集める → #(20,40,60)
sort a -- 昇順ソート(破壊的)
amin a -- 最小値
amax a -- 最大値
a + #(50, 60) -- 連結
for … where 条件 collect 式は、条件を満たす要素だけについて式の値を集めて 新しい配列を返す 構文です。元の配列は変わりません。
重複を除く
makeUniqueArray #(1,2,2,3,3,3) -- #(1,2,3)(新しい配列を返す)
seen = #()
appendIfUnique seen 1 -- 無いときだけ追加(追加したら true)
appendIfUnique seen 1 -- 既にあるので false(追加されない)
makeUniqueArrayは元の配列を変えず、初出の順序を保ったまま重複を除いた新しい配列を返します。配列を作りながら重複だけ避けたいときは、空の配列にappendIfUniqueで 1 つずつ足していきます。
落とし穴まとめ
- 配列・文字列のインデックスは 1 始まり。
findItem/findStringの「見つからない」戻り値は前者が0、後者がundefined。append/sort/deleteItemは破壊的。元を残すならcopyする。filterStringの区切りは「文字の集合」。意図しない分割に注意。
関連
- ファイル名のパス分解(
getFilenameFile等): 「ファイル・パス」章 - リネームでの連番整形: 「表示・名前・色・ユーザ定義」章
コメント