文字列・配列
MaxScript チートシート の章一覧
スクリプトの下ごしらえでよく使う、文字列と配列の操作です。MaxScript 特有の名前・記法に絞って収録します。
文字列の基本
"Hello" + " " + "World" -- 連結
"abc".count -- 文字数
toUpper "abc" -- "ABC"
toLower "ABC" -- "abc"
(i as string) -- 数値→文字列
("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 " -- 右の空白を除去
- ⚠️
filterStringの第2引数は 区切り文字の集合 です。", "はカンマと空白の両方が区切りになります。
数値の整形(ゼロ埋め・桁数)
formattedPrint 5 format:"03d" -- "005"(3桁ゼロ埋め)
formattedPrint 3.14159 format:".2f" -- "3.14"(小数2桁)
"Part_" + (formattedPrint i format:"03d") -- 連番名 Part_001
文字列を組み立てる(format / stringStream)
format "% を % 回処理\n" "Box" 3 -- リスナーに出力(% が引数で埋まる)
ss = stringStream "" -- 文字列バッファ
format "name=%, id=%\n" $.name 1 to:ss -- バッファに書く
ss as string -- 文字列として取り出す
formatの%は 引数で順に置換 されます。to:で出力先(ファイル・stringStream)を変えられます。
配列の基本
a = #(10, 20, 30)
a[2] -- 20(1始まり)
a.count -- 3
append a 40 -- 末尾に追加(破壊的)
a[5] = 99 -- 隙間は undefined で埋まる
deleteItem a 1 -- 1番目を削除
findItem a 30 -- 値30のインデックス(無ければ 0)
- ⚠️ インデックスは 1 始まり。
findItemは見つからないと0(undefinedではない)を返します。
集める・絞る・並べる
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 ... collectは 新しい配列を返す ので、元を壊さず変換・抽出できます。
重複を除く
fn unique arr =
(
local seen = #()
for x in arr where (findItem seen x == 0) collect (append seen x; x)
)
unique #(1,2,2,3,3,3) -- #(1,2,3)
落とし穴まとめ
- 配列・文字列のインデックスは 1 始まり。
findItem/findStringの「見つからない」戻り値は前者が0、後者がundefined。append/sort/deleteItemは破壊的。元を残すならcopyする。filterStringの区切りは「文字の集合」。意図しない分割に注意。
関連
- ファイル名のパス分解(
getFilenameFile等): 「ファイル・パス」章 - リネームでの連番整形: 「表示・名前・色」章