019
columnDelimiter / rowDelimiter を使った Array(配列)
基本的なアレイ(Array) の説明は 014 にあります。
revTalk では、コラム(column)と、ロウ(row) をデリミッタとした、アレイ(Array)が使えます。
と書くとわかりにくいですが、
3つのコラム(タテ欄)で2つのロウ(ヨコ列)を持つテーブルを思い浮かべれば、すぐにわかるでしょう。
a b c d e f というテーブルを考えてください。
文字列で表せばこうなります。
a <columnDel> b <columnDel> c <rowDel>
d <columnDel> e <columnDel> f
このようなアレイを、一般的にマルチディメンショナル・アレイと言うようです。
このテーブルをmyTableと言うアレイとして、
columnDel でアレイを区切ると、
myTable[1] で
a
b
が取り出せるということです。
念のため付け加えると
myTable[3] では、
c
f
が取り出されます。
また、 rowDel で区切ると
myTable[1] で
abc
とテーブルのヨコ列が取り出せます。
このアレイのデリミタは、デフォルト(設定しない限り)で、columnDelimiterに設定されています。
もう少し具体的なスクリプトを書いてみましょう。
やはりテーブルで考えます。
revTalk で普通のテーブルのコラム(タテ欄)のデリミタは「tab」で、
ロウ(ヨコ列)は「return = cr」ですから
"a" tab "b" tab "c" return
"d" tab "e" tab "f"
こういう3コラム、2ロウのテーブルを例にすると
デフォルトで columnDelimiter(デリミタ)が「tab」に設定されているので(特にデリミタの設定をしなくても)
コラムをデリミタとしてアレイを作るには
put "a" & tab & "b" & tab & "c" &cr& "d" & tab & "e" & tab & "f" into myTable
split myTable by column
これで myTable と言うアレイが作られますから (set the columnDel to tab は必要ない)
put myTable[1]
と言うスクリプトから、始めのコラム
a
d
がメッセージボックスに書き出されます。
split は 014 に説明があります。
次にデリミタを変えてみます。
a <cd> b <cd> c <rd>
d <cd> e <cd> f <rd>
g <cd> h <cd> i
と言う Array のcolumnDelimiter(上の表では <cd> ) を、カンマにした場合の例です。
put "a,b,c" &cr& "d,e,f" &cr& "g,h,i" &cr into myTable
set the columnDel to comma -- columnDelimiter をカンマに設定
split myTable by column -- コラムをデリミタとしてアレイにする
put myTable[3]
と言うスクリプトから、タテの3欄目がメッセージボックスに書き出されます。
c
f
i
同じように、
put "a,b,c" &cr& "d,e,f" &cr& "g,h,i" &cr into myTable
set the rowDel to cr -- rowDelimiter をcr に設定
split myTable by row --ロウをデリミタとしてアレイにする
put myTable[1]
と言うスクリプトから、ヨコの1列目がメッセージボックスに書き出されます。
a,b,c
次にcolumnDelimiter をカンマとして作ったアレイから、
コラムのひとつを取り出して、その後アレイでない普通の3段(3 lines)の文字列に戻します。
put "a,b,c" &cr& "d,e,f" &cr& "g,h,i" &cr into myTable
set the columnDel to comma split myTable by column -- コラムをデリミタとしてアレイにする
put myTable[2] -- ふたつ目のコラムを取り出す
wait 60
combine myTable using column -- combine, columnを使って文字列にもどす
put myTable
上のスクリプトは、始めに ふたつ目のコラム
b e h
がメッセージボックスに書き出され、その1秒後に
a,b,c
d,e,f
g,h,i
がメッセージボックスに書き出されます。
combine は 014 に説明があります。
文字列に戻す最後の部分を「row」を使うと
put "a,b,c" &cr& "d,e,f" &cr& "g,h,i" &cr into myTable
set the columnDel to comma
split myTable by column
put myTable[2]
wait 60
combine myTable using row -- combine, row を使って文字列に戻す
put myTable
上のスクリプトは、始めに ふたつ目のコラム
b e h
がメッセージボックスに書き出され、その1秒後に
a
d
g
b
e
h
c
f
i
がメッセージボックスに書き出されます。