DTPab

印刷やデザイン、アドビ製アプリやスクリプトなど、雑多な技術ブログ

AppleScriptでレコードのキーから値にアクセスしたい…

仕事ではFinder操作を扱うAppleScriptをときどき書いていますが、レコードの値にアクセスする方法がわからなくて困っていました。
例えばこんなふうなことをAppleScriptでしたいのですよ……。

//これはJavaScript
var dataList = {
    "こがね": {age: 19, birth: "Nagasaki"},
    "さくや": {age: 18, birth: "Kouchi"},
    "まみみ": {age: 18, birth: "Kanagawa"},
    "ゆいか": {age: 19, birth: "Fukushima"},
    "きりこ": {age: 17, birth: "Aomori"}
};

var aKey = "こがね"; //リストから選んだ結果として文字列が返ってきたとして

alert(aKey+"の年齢:"+dataList[aKey].age+", 出身地:"+dataList[aKey].birth);

ところがAppleScriptではこうはいかない。

そしたらこちらに解決策というか打開策がありました。

zariganitosh.hatenablog.jp

というわけでそこから拝借して自分で書いたコードがこちら。

set nameList to {"こがね", "さくや", "まみみ", "ゆいか", "きりこ"}
set dataList to {|こがね|:{age:19, birth:"長崎"}, |ゆいか|:{age:19, birth:"福島"}, |さくや|:{age:18, birth:"高知"}, |まみみ|:{age:18, birth:"神奈川"}, |きりこ|:{age:17, birth:"青森"}}

choose from list nameList
set aKey to result
set res to getAttributes(dataList, aKey)
display dialog (aKey & "の年齢:" & res's age & ", 出身地:" & res's birth) as text

on getAttributes(dataList, aKey)
    run script "
on value_of(obj)
 obj's |" & aKey & "|
end
me"
    result's value_of(dataList)
end getAttributes

いやーすっきりした!!!
もくもく会Slackチャンネルでお付き合いくださったMD5500さん、ありがとう!

【追記 5/25 10:40】

set aKey to choose from list nameList

MDさんに教えてもらったこちらのほうが好きかも。resultって予約語がいまいちわからないので…。
MDさんサンキューデース!