title1
navigation bar3



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


連載[4-3] ソフトが人間の言葉を理解するのはなぜ?


《 今日の日付をファイル名にするには 》
8行目の「current date」というのは?
先生
うん、これは現在の日付を取り出すコマンドなんだ。これはコントロールパネルの「日付&時刻」で指定したフォーマットの日付と時刻を返してくる。
システムの日付フォーマットですね。
先生
なかなかマックにお詳しい。そして得られたデータから、date stringで日付だけを文字列として抜き出すんです。
ここでは英語形式の日付を選んでいるから、

  date string of (current date)

の結果は、

  "March 24, 1995"

といった文字列になります。
これに元のファイル名の最後の単語、すなわち支店名を付け加えれば新しいファイル名が出来上がる。

  "March 24, 1995, Tokyo"

といった具合です。

そしてすべてのファイルについて同様のことを行い、最後のmove命令でファイルを一斉に「移動させる」。
サーバーですからコピーになりますね。
先生
いやぁ、その通り、さすがだね。

  move (移動するオブジェクト) to (移動先)

はFinderのコマンドで、フォルダやファイルを移動させるんです。
移動先の指定で「to folder aServerFolder」としていますが、通常は「to aServerFolder」で動きます。
システムのバージョンによっては動かないこともあるので,その時は「folder」を付けてください。
スクリプトを実行し終わると、こんな感じです。

TOP


《 日付の表示形式にこだわる 》
ところで先生、もう少しファイル名を工夫できませんか。例えば 940324.Tokyo といった風に、コンパクトにしたいんですけど。
先生
ちょっと面倒くさいけれど図4のようにすればよいでしょう。あんまり見栄えはしないんだけれど、これでも一応うまく行きます。
図4 日付の形式に凝ったスクリプト
なるほど、なるほど、手が込んでますけど分かりやすいですね。
先生
おいおい、茶々をいれるなよ。
日付文字列を得る部分が先ほどと違いますね。
先生
まず、9行目の   (text from character 3 to character 4 of word 3 of myDate)  で、「1995」の下2桁「95」だけを得ている。
あぁ、それは分かります。
先生
10行目以下に続いている入れ子細工みたいなif文は、条件を判断して実行する内容を変える構文ですよ。

 if (条件1) then
  (条件1が成立した時に実行する内容)
 else if (条件2) then
  (条件2が成立した時に実行する内容)
 else if (条件3) then
    :
 end if

これでアルファベット表示の月の名前を2桁の数字に変換している。
「April」だったら「04」にする、というような具合だね。

もう1つifブロックがありますが。

 count characters of word 3 of myDate
 if result = 1 then
  set myDay to "0" & (word 3 of myDate)
 else
  set myDay to (word 3 of myDate)
 end if

先生
これは、日付が1桁だった場合に、頭に「0」をつけるためです。
count charactersで日付の文字数を調べて、if文で判断します。
でも「日付&時刻」で「日付に“0”を付ける」をチェックしておけばいいじゃないですか。
先生
まぁ、そうなんだけど。コントロールパネルで設定できない場合もAppleScriptで何とかなるってことを言いたかったのさ。そうそう、言い忘れたが、「日付&時刻」のフォーマットを変えると、スクリプトも単語を操作する部分を作り直す必要があるから注意が必要だね。
では、実行してみましょうよ。おっと、今度はサーバーのフォルダに、違う日付形式のファイルが出来ましたね。
TOP


《 今日のスクリプトは幼稚園レベル 》
これで、完ぺきですね、先生。
先生
まぁ、今日のところはこれで良しとしておこうか。
えっ、ということはまだ何か?
先生
そう。このスクリプトはある意味じゃ裸のまんまだからね。本当はこれをもっと鍛えてさらに鎧を着せて、それこそ鉄人にする必要があるんだ。
ちゃんと動いているのに、何を鍛える必要があるんですか?
先生
例えば、さっき出てきた入れ子のif文もあんまりみっともいいものじゃないし、それにエラー処理も全然やっていない。
ファイルを移動する時に同じファイル名が既にあった場合にどうするかとか、考えるべきことはたくさんあるんだ。
実行中に何かのエラーが起こってスクリプトが途中で終わってしまったりしても困るしね。一度にたくさんのファイルを処理するのに、たった1つのファイルが原因でスクリプトが止まってしまうというのは実に不便だと思わないかい?
それはおっしゃるとおりですね。
先生
プロはそうしたことを考えてシステムを作るんだよ。それに今回はホスト・コンピューターから取り出したデータをファイルメーカーProの中で処理したけれど、プロはそんなことしないよ。
と言いますと?
先生
例えばDataScriptと言うソフトを使えば、AppleScriptで直接ホストのSQLデータベースにアクセスできる。
次回はそろそろ“プロ”のスクリプトをめざしてみようか。
プッ、プロですか!?
先生
今言ったようにエラーにも自動的に対処してくれるような仕組みも付け加えて行ったら実用的になると思うんだがね。
まぁ、どこまでやれるかお楽しみだ。取りあえずは、これでゴールデン・ウイークはゆっくり遊べそうかな?
はい。ありがとうございます。プロのスクリプトも楽しみです。またお邪魔させていただいてもいいですか?
先生
どうぞ、どうぞ。熱心な方はいつでも大歓迎ですよ。

TOP

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

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

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