Array

「Array」と「カスタムプロパティ」の表記方法の違い

get nArray["Tokyo"] of stack "DBase"


get the nArray["Tokyo"] of stack "DBase"

一行目と二行目の違いはtheがあるかないかです。その結果、上nArrayはArray、下のnArrayはカスタムプロパティセットを表しています。theがついているかどうかで意味が違ってくるのは中学の英文法のようです。
ここでは、Array、Arrayとカスタムプロパティの違いについて説明します。

 

Arrayの基本的な使い方 KeyとElement

put "2-2-2, Chiyodaku" into nArray["Tokyo"]

上記では、nArrayというArrayに、"Tokyo"というKeyで、 "2-2-2, Chiyodaku" という住所をElementとして入れています。
Arrayの名称の前にtheはつけない (theをつけるとカスタムプロパティセットとみなされる)。

このようにして作成したnArrayから住所(Element)を引き出すには、次のように書く。

get nArray["Tokyo"]

これでitに"2-2-2, Chiyodaku" が入ります。

注意
作成したArrayを別なオブジェクト(やスクリプト)で使いまわしするにはGlobal宣言(やLocal宣言)が必要だが、次に説明するカスタムプロパティは、その名称をGlobal宣言すると全く使えなくなる。


Arrayで使用しているKeyの名称のリストを取得するスクリプト

get the keys of WBArray

Arrayの名称がWBArrayであるとする。


Arrayに入っているElementの数を取得するスクリプト

get the number of lines in the keys of WBArray

Arrayの名称がWBArrayであるとする。ofでなはくin


Arrayをスタックに保存するスクリプト

set the customProperties["WBArray"] of stack "untitled.ply" to nArray

Arrayは、カスタムプロパティセットとしてスタックに保存することができる。
上記のスクリプトによって、nArrayという名称のArrayが、"untitled.ply"というスタックのカスタムプロパティセットとして"WBArray"という名称でcopyされる。"untitled.ply"スタックを通常通りに保存することでこのArrayはそのスタックの中に保存される。theを忘れずに。
このように保存されたカスタムプロパティは、「Objects/Stack Inspector」メニューで現れるダイアログの「Custom Properties」の「Sets:」プルダウンメニューから見ることができ、ここで削除や名称の変更もできる。

保存したArrayのElementsをカスタムプロパティセットから引き出すには、前述の例で説明するなら、

get the WBArray["MU1"] of stack "untitled.ply"

これによって、itにMU1というKeyのElementである"MU1,A,MM1,Main<100,70,150,120T..."がcopyされる。
次は、 やってはいけない例。

Global WBArray

get the WBArray["MU1"] of stack "untitled.ply"

どうしてやってはいけないか
カスタムプロパティセットの名称をGlobal宣言すると、RunRevはその名称をカスタムプロパティセットとして認識しなくなるから。
この例における"WBArray"は、前述の図 「Custom Properties」の「Sets:」プルダウンメニューに表示される名称、すなわちカスタムプロパティセットである。
ところが、 その名称を、そのスクリプトにおいてGlobal宣言していると、ちゃんとカスタムプロパティセットの前に(ここではWBArray)theと書いていてもその名称をカスタムプロパティセットとして認識せず、上記スクリプトは機能しない。 これはカスタムプロパティでも同じ。

しかし、WBArrayがカスタムプロパティセットでなく、普通のArrayであり、なおかつ複数のカードで使いまわしされているのなら、次のように書かなければならない。

Global WBArray

get WBArray["MU1"] of stack "untitled.ply"

 



Arrayを削除する

delete variable theArray

or

put empty into theArray



ArrayのElementをKeyごと削除する

delete variable WBArray["MU1"]

put empty into WBArray["MU1"]とやると、MU1に空白のElementが入る。


カスタムプロパティセットを削除する

get the customPropertySets of stack "untitled.ply"
set the wholeMatches to true
delete line lineOffset("WBArray",it) of it
set the customPropertySets of stack "untitled.ply" to it

カスタムプロパティセットを直接削除することはできない。そこで、いったんitにコピーして、削除すべきものを削除し、その後にitをカスタムプロパティセットに戻す。
wholeMatchesは、 全文一致の場合だけ削除を実行する、という目的のために必要。

上記の文では、"untitled.ply"というスタックにあるすべてのカスタムプロパティセットの中から、"WBArray"という名前のカスタムプロパティセットを削除している。

ディフォルトでwholeMatchesはfalseになっているので、気になるならfalseに戻しておいた方がいいかもしれない。

カスタムプロパティを削除する場合も同じ考え方で行う。すなわち、一行目を、get the customKeys of stack "untitled.ply"に変えて、四行目も同様にcustomPropertySetsをcustomKeysに修正する。

カスタムプロパティセットをすべて削除するには、以下のようにemptyにする。

set the customPropertySets of stack "untitled.ply" to empty


Repeat...each文の中で、ArrayのKeyとArrayのElementを同時に抽出し、myListにコピーする

put "" into myList
put 1 into elementNum
repeat for each element ThisElement in HashArray
if e >= 5 then
  put line elementNum of keys(HashArray) & "," & ThisElement& cr after myList
end if
  add 1 to elementNum
end repeat

Repeat...each文は、強力にArrayのElementを操作しますが、では、どうすればその操作しているElementのKeyを同時に呼び出すことができるかログを検索したら出てきたスクリプト。

説明
HashArrayを呼び出し(たぶんElementには1とか6とかの数字が入っている)、repeat...each文によって、ArrayのすべてのElementをチェック。Elementの数字が5以上である場合、そのKeyの名称とElementの数字をcommaで区切って、myListに入れているスクリプトです。

HashArrayはArrayの名称。
Repeat each文によって、ThisElementの中にElementが一行ずつ入る。
Repeat each文では、ofでなくinを使う。(よく間違える)
keys(cPoints)で、Keyのすべての名前をリストにする。それを put line elementNum で一行目(最初のKey)から順番に呼び出す。

combine ArrayName using return and comma で、単一のvaliable(テキスト)に変換する方法もある。


Arrayをテキストに変換する、あるいはテキストをArrayに変換する

combine LogArray using return and comma

上記でLogArrayをテキストに変換する。keyは各行の最初に","の前に置かれる。
ArrayとしてのLogArrayは失われ、テキストデータがLogArrayという名称で残るので、必要であれば元のLogArrayを別な名称で保存たものをcombineでテキスト化するとよい。

たとえば、"MU1"というkeyを持つ"MU1,NU1,,Main,49,49,0.785398,34.648232,2381,809,01-JA"というArrayは、combineすると次のようになる。

MU1,MU1,NU1,,Main,49,49,0.785398,34.648232,2381,809,01-JA

split LogArray by return and comma

上記で、combineによってテキスト化されたデータをArrayに戻す。各行の最初のアイテムがArrayのkeyになる。


Arrayをコピーする あるいは、2つのArrayをひとつにする

put 1 into eNum
repeat for each element ThisElement in HashArray
  put line eNum of keys(HashArray) into thekey
  put ThisElement into LogArray[thekey]
  add 1 to eNum
end repeat

HashArrayLogArrayにコピーするスクリプト。同じKeyが両方にあるとover write。

 


Arrayをkeyでソートする

put the keys of theArray into akeys
sort numeric lines of akeys
repeat for each line i in akeys
  put theArray[i] into something
end repeat

正確にはArrayをソートしているのでなく、Arrayを出力する時にソートしています。


カスタムプロパティの名称のリストを取得

get the customPropertySets of stack "PlayFile"

"PlayFile"という名称のスタックにカスタムプロパティが保存されている、という前提。


追加: 2005年5月16日

カスタムプロパティをitに入れる場合、

set the customProperties[PreWArray] of stack "Play" to it

もしくは、

put the customProperties[PreWArray] of stack "Play" into it

のどちらでもできるが、そのitをスタックのカスタムプロパティに入れる(戻す)場合、

put it into the customProperties[PreWArray]

ではできず、

set the customProperties[PreWArray] of stack SegFileName to it

を使わなければならない(?)