StringStream クラスにより、すべてのテキスト ファイル入出力関数を使って文字列を構成し、解析することができます。たとえば、StringStream を設定して、テキスト ファイルと同じように出力したりフォーマットして、文字列を作成できます。逆に、String を StringStream に変換し、readLine()
、readValue()
、skipToString()
などの関数を使用して操作することもできます。String と StringStream 間の変換は簡単なため、長い複雑な文字列を処理する場合に便利です。
StringStream クラスを AppData アクセス関数と併用して、大容量で複雑なスクリプト生成データを 3ds Max シーン ファイルの内部に永久的に保存して検索できます。
コンストラクタ:
stringStream <initial_string>
初期文字列を使用して新しい StringStream を作成します。
<string> as stringStream
既存の文字列を StringStream に変換します。
詳細については、文字列リテラルおよび文字列値も参照してください。
演算子
<stringstream> as string
StringStream を文字列に変換します。
メソッド
copy <stringstream>
StringStream の別のコピーを作成します。
free <stringStream>
ガベージ コレクションを待たずに、stringStream 値によって使用されているメモリを解放します。
3ds Max 9 以降 で使用可能です。
例
ss = stringstream "ABCDE"
--> StringStream:"ABCDE"
ss
--> StringStream:"ABCDE"
free ss
--> OK
ss
--> StringStream:""
関連するメソッド
print <value> to:<stringstream>
format "<fmt_string>" {values} to:<stringstream>
print()
および format()
関数は、StringStream を一度に 1 つずつ作成する手段として機能します。テキスト ファイル出力関数と同じように、出力またはフォーマット関数を呼び出すたびに既存のテキストに追加され、StringStream は必要に応じてダイナミックに拡張していきます。次に説明する seek()
関数を使って、出力ストリームを再配置できます。
FileStream 値に使用できるテキスト ファイル入力関数と同じです。詳細については、FileStream 値を参照してください。StringStream インスタンスを呼び出すと、連続する値、行、文字などを抽出しながら文字列を段階的に読み込みます。
<stringstream>append <stringstream> <string>
2 番目の引数として渡された文字列を 1 番目の引数として指定された stringstream に追加します。
stringstream をそのまま操作し、結果の stringstream を返します。
3ds Max 2012 以降で使用可能です。
readValue <stringstream> [ ignoreStringEscapes:<boolean> ]
safeReadValue <stringstream> [ ignoreStringEscapes:<boolean> ]
stringStream から次の MAXScript <operand>
を読み取り、評価します
オプションの ignoreStringEscapes:
キーワード引数を指定しないか、あるいは false に指定し、かつ、読み取った値が文字列である場合、文字列の文字「\」はエスケープ文字として処理されます。true の場合、文字列内の「\」は、エスケープ文字として処理されません。このオプションは、3ds Max 8 以降 で使用可能です。
3ds Max 2022.1 Update の新機能:
safeReadValue()
バージョンは安全ではない MAXScript、.NET、および Python コマンドを常にブロックします。
例
ss = stringstream "\"a\\tb\""
seek ss 0
readvalue ss
結果
"a b" -- \t handled as a tab
しかし
seek ss 0
readvalue ss ignoreStringEscapes:true
結果
"a\t\b" -- \t handled as characters
readExpr <stringstream>
safeReadExpr <stringstream>
stringStream から次の MAXScript <expr>
を読み取り、評価しますexecute()と同様に、評価の範囲は現在のスコープではなくグローバル スコープです。
3ds Max 2022.1 Update の新機能:
safeReadExpr()
バージョンは安全ではない MAXScript、.NET、および Python コマンドを常にブロックします。
readLine <stringstream>
次の行を読み込んで、文字列として返します。
readChar <stringstream>
次の文字を読み込んで、文字列として返します。
readChars <stringstream> <number> errorAtEOF:<boolean>
指定された文字数を読み込み、1 つの文字列にして返します。
errorAtEOF
パラメータが false の場合は、このメソッドがストリングストリームの末尾を超えて読み取ろうとしても、例外が発生しません。同様に、このパラメータを false に、<char_count>
を -1 に設定した場合は、このメソッドが StringStream の末尾まで読み取るようになります。既定値は true です。
readDelimitedString <stringstream> <string>
(string引数の)区切り文字を得て、区切り文字が見つかる(またはファイルの終わりに到達する)まで文字を読み込み、それらの文字を文字列として返します。
readDelimitedString (stringStream "This is an abc string") "abc"
は「This is an」でなく「This is」を返します。skipToString <stringstream> <string>
指定した文字列を前方検索し、文字列が見つかったらその文字列の直後に位置を設定します。文字列が見つからない場合、関数は undefined
値を返します。
skipToNextLine <stringstream>
入力ファイルの次の行の先頭に位置を設定します。
execute <stringstream>
stringStream に残されたすべての式を読み込み、評価します。評価のスコープは現在のスコープではなく、グローバル スコープであることに注意してください。
filePos <stringstream>
ファイルの現在のオフセットを取得します。
seek <stringstream> <pos>
後続の入出力がそこから開始するように与えられたオフセットでファイルを位置決めします。
eof <stringstream>
stringStream にこれ以上データがない場合は true を、ある場合は false を返します。
close <stringstream>
flush <stringstream>
close()
および flush()
関数は、ファイル入出力との一貫性を維持するために用意されていますが、これらは StringStream には必要なく、呼び出されても何も実行しません。