日本でハリウッドVFXを制作! 「経産省アイディアボックス」 結果:  
●まとめエントリはこちら ●FAQ ●お問い合わせは左のメールフォームから

2009年5月25日月曜日

配列への値の追加  (2)

前回のスクリプトを見直したときおかしな点をみつけた。
printで出力されるときに、配列名[5]-[9]を文字列で表示しているが、これではその配列要素が存在するかのように見えてしまう。

配列の内容を表示するのは便利がいいのだが、少し変えてやる必要があるようだ。

二回目の配列へ値を格納した後にその配列のサイズを測って、そのサイズを元にfor文のループ数を決めることにした。

{
string $aaa[] = `ls -sl`;
print $aaa;
string $aaa[] = `ls -sl`;
int $size =size($aaa);

for ($i=0; $i<$size; $i++){
print ("$aaa["+$i+"]"+ "=" + $aaa[$i]+"\n");
}
}

これで正確に表示されるようになった。

locator1
locator2
locator3
locator4
locator5
$aaa[0]=locator1
$aaa[1]=locator2
$aaa[2]=locator3
$aaa[3]=locator4
$aaa[4]=locator5


また趣旨としては、複数オブジェクト名を格納した配列ににあらたに複数のオブジェクトを追加する方法を模索しています。
おそらくただ単品のオブジェクトを追加していくなら以下のような複雑な手順は必要無いはず。

そして、実際の作業では一つのグループ内にあるオブジェクトを配列に格納したあと、別のグループ内にあるオブジェクトをその配列に加えていくような状況でつかえると思っています。


まず配列の仕組みを考えると、
最初に値を格納するときに自動的に(もしくはサイズを指定したときには宣言時に)配列のサイズが決まる。。

一度サイズが決まった配列に、続けて別の値を入れてやる場合は、そのサイズを変更しなくてはならない。

オンラインヘルプの「配列のサイズの変更」で、配列の要素を指定すればサイズを大きくできることがわかった。

他に簡単そうな方法は書かれていないのでこれを使うしかなさそうだ。

実際に新しく加えるオブジェクトの総数をあらかじめ知ることはできないので、新しいオブジェクトを別の配列に格納して整理し、それからその値を格納したい配列に入れていくという手順が必要になる。

1)最初の配列に値を格納。(配列1)
2)そのサイズを得る。(サイズ1)
3)新しい配列にあらたなオブジェクトを格納。(配列2)
4)そのサイズを得る。(サイズ2)
5)for($i=サイズ1; $i<サイズ1+サイズ2;$i+1)
6)for文の中で、配列2の値を頭から順に配列1にコピーしていく。


最後の部分を具体的に書くと、
$aaa[5]から順番に配列2の[0]からの値を格納していく。

{
string $aaa[] = `ls -sl`;
int $size1 = size($aaa);
print $aaa;

string $bbb[] = `ls -sl`;
int $size2 =size($bbb);

for ($i=$size1; $i<($size1+$size2); $i++){
$aaa[$i] = $bbb[$i-$size1];
}

for ($i=0; $i<($size1+$size2); $i++){
print ("$aaa["+$i+"]"+ "=" + $aaa[$i]+"\n");
}
}


結果は以下の通り、ちゃんと動作してくれました。

locator1
locator2
locator3
locator4
locator5
$aaa[0]=locator1
$aaa[1]=locator2
$aaa[2]=locator3
$aaa[3]=locator4
$aaa[4]=locator5
$aaa[5]=locator1
$aaa[6]=locator2
$aaa[7]=locator3
$aaa[8]=locator4
$aaa[9]=locator5


実際の所この方法がどれほど使えるのかわからないし、他にもっと簡単な方法もあるような気がしますが、とりあえず、いろいろとスクリプトを考える練習のために思いついたことを試してみました。

2 件のコメント:

  1. Melonさんのおかげもあって、最近だいぶMELが書けるようになってきました^^
    つまらない内容ですが、一応私もCGブログやってるので良かったら遊びに来てください。

    返信削除
  2. ほんとですか! 少しでも助けになったのならとてもうれしいことです。
    ブログの方、見させていただきました。いやいや自分よりよっぽどすごいです。
    これからもちょくちょく寄らせていただき勉強させていただきます。

    返信削除