title1
navigation bar3



[ 1 | 2 | 3 |4 |5 | 6-p1 | 6-p2 | 6-p3 | 7 | 8 | 9 | 10 | 11 | 12 ] [日経マック連載Index ]


連載[6-3] 今日はちょっと教科書的にお勉強


《 ファイルの名前を表示しようとするとエラーに 》

先生、もう1つエラーの例があるんですけど。choose fileでちゃんとファイルが選ばれているかをダイアログ・ボックスで確認するために、こんなスクリプトを書いてみたんです。

set myFile to choose file
 display dialog name of myFile

これを実行しようとすると、こんなエラーになってしまいます。

先生
はは〜ん、よくある、よくある。ケアレス・ミスだぞ。コマンドのところでも言ったけど、プロパティー(属性)もそれぞれのアプリケーションに固有のものなんだ。
プロパティーと言いますと?
  
ファイルの名前、つまりnameというプロパティーを取り出せるのはFinderなんだよ。だからtellステートメントでFinderをアプリケーションとして指定しなきゃならない。

 set myFile to choose file
 tell application "Finder"
  display dialog (name of myFile) as string
 end tell

って書けばいい。
display dialogが表示できるのは文字列だから、as stringでnameプロパティーを文字列に変換するのを忘れないでね。

choose fileで得た結果から、直接nameを操作することはできないんですね。
先生
そう、choose fileは単なるスクリプティング機能追加コマンドで、ファイルやフォルダがクラス化されているわけではないんだ。それらをクラスとして体系化しているのはあくまでもFinderだから、name を操作したり,moveしたりする時には、Finderにtellする必要があるんだね。
TOP


《 実行中に文字を入力したい 》
あのう、もう1つ困ったことがあるんですけど。
先生
何だね。
スクリプトを実行中にキーボードから文字を入力してそれを変数に格納することはできないんでしょうか。
例えばユーザーに名前とかパスワードを入力させるとか、数字を指定するとかしたいですよね。
先生
これも実はdisplay dialogコマンドでできるんだよ。display dialogの修飾節として、default answerというのが用意されている。この修飾節を付けた場合は、ダイアログの中にテキスト・ボックスが現れて来るんだ。
使い方は、  display dialog メッセージ default answer 取りあえずの入力 という感じ。
取りあえずの入力の中には、最初にテキスト・ボックスに入る文字列を書いておけばいい。
つまり、ユーザーに「まあ、それでいいや」って思わせるようなものとか、入力の仕方の見本とかだね。
例えば、  display dialog "読むものは何ですか?"
     default answer "新聞と雑誌" というような具合になる。
これを実行すると次のようにテキスト・ボックス付きのダイアログが表示される。
ここでユーザーが文字を入力できるわけですね。入力した結果はスクリプト中ではどうなっているんですか。
先生
display dialogはReply型のオブジェクトを返してくる。
Reply型のオブジェクト?
先生
まぁまぁそれは置いといて,その中のプロパティーとしてだね、

 text returned

というものがあるんだよ。これが入力された文字列を持っているんだ。まぁ、とにかく使ってみよう。

 set myBirthday to (text returned of
(display dialog "誕生日はいつですか?"
     default answer "5/30/75"))

こんな風に書けば変数myBirthdayの中にテキスト・ボックスで入力された文字列が入ってくれる。これで解答になったかな。

TOP


《 応用編 》
今回のQ&Aで覚えたことを使って、何か役立ちそうなスクリプトを書いてみたいですね。
先生
よし、じゃあちょっと見せてあげよう。(別ウインドウ図1)テーマは、指定された日付よりも後に修正されたファイルやフォルダの名前を表示する。便利でしょ? よくそういうようなことが必要な状況ってあるからね。
実行すると、最初にフォルダを選ぶダイアログボックスが出てきて、その後に、日付を尋ねてきますね。
先生
そうそう、先ほど教えたことの応用だね。

 set theDate to date (text returned of (display dialog
"日付を設定して下さい" default answer "93.12.30"))

で、変数theDateにユーザーが入力した日付が入る。おっと、日付を入力する時は,コントロールパネルの「日付&時刻」で設定した書式でね。

dateというのは何ですか。
先生
これは、文字列から日付を指定するものなんだ。

 date 日付を表す文字列

で文字列が日付型のデータに変換される。この日付の値には、時間も含まれているので、例えば「date "93.12.30"」なら「1993年12月30日午前0時0分0秒」というデータになる。

このスクリプトを実行すると、ダイアログ・ボックスが何度も表れて、指定した日付より後に修正されたファイルの名前が次々に表示されていきますね。
先生
repeatステートメントですべてのファイルについて修正日をチェックしているからね。
ファイルやフォルダの修正日は、Finderのitemのプロパティー「modification date」で得られる。
すべてのファイルについて繰り返すと言っても、フォルダの中にフォルダがあった場合はどうなるんですか。
先生
子供のフォルダも、その孫フォルダの中にあるファイルも、すべて繰り返し対象になる。

 entire contents of フォルダ名

というのがポイントだ。これはフォルダに対して用意されているプロパティーで、そのフォルダに含まれているすべてのファイルや フォルダの一覧をリストとして返してくる。これを使えば、階層構造になったフォルダの中のすべてのファイルに対して何か処理を行うスクリプトが簡単に書けるよね。

あれっ、すいません、先生。間違ってハード・ディスクを対象に選んじゃいました。
先生
おいおい、ハード・ディスク全体を選んでしまったらもう大変。全部のファイルを見に行ってしまうからね。
このまま永遠に続いちゃうんですか。
先生
さっき教えただろう。嫌になったらダイアログが出てきた時にキャンセルを押せば途中で中断できるよ。


TOP

AppleScript救急隊事務局(ASQs) info-asqs@fsight.co.jp

主催 株式会社フォーサイト   後援 アップルコンピュータ株式会社

(c)1996-2010 The ForeSight Inc. All rights reserved.Appleは、米国アップルコンピュータ社の登録商標です。
AppleScriptは、米国アップルコンピュータ社の商標です。
その他記載の会社名・製品名・ソフトウェア名は一般にその会社の登録商標または商標です。