Archive for 5月, 2008

2008/05/31 クリエーターコードを指定してアプリケーションを起動する

普通、クリエーターコードを指定して該当するアプリケーションのパスを取得して、そのパスをFinderでオープンすれば、該当するクリエーターコードのアプリケーションを起動することは可能です。Mac OS X 10.5であれば、そのあたりの機能が追加されているものですが……10.4.xではその機能を利用することはできません。

クリエーターコードで指定すれば該当するアプリケーションのパスが得られる……というのが通常のアプリケーションの動作ですが、Adobe Acrobat Professionalだけは、クリエーターコードからパスを取得すると、アプリケーションバンドル内のヘルパーアプリケーションのパスが返ってきてしまいます。

そこで、対策するコードを作ってみた次第です。こんな処理は、Acrobat以外には必要ないのですが……Adobeのアプリケーションには、ほとほと苦労させられどおしです。
(more…)

2008/05/31 バージョン番号文字列からメジャーバージョンのみ取り出し

バージョン文字列のうち、メジャーバージョンを数値として取り出すサブルーチンです。「10.5.1」から「10」を取り出すというものです。

スクリプト名:バージョン番号文字列からメジャーバージョンのみ取り出し
set aVerStr to "10.0.1"
set aVer to detectMajorVersionNumber(aVerStr) of me
> "10"

バージョン番号文字列からメジャーバージョンのみ取り出し
on detectMajorVersionNumber(aVerStr)
  set aPos to offset of "." in aVerStr
  
set nvStr to text 1 thru (aPos - 1) of aVerStr
  
return nvStr
end detectMajorVersionNumber

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

2008/05/30 指定クリエーターコードを持つアプリケーションプロセスの個数を数える

異なるバージョンのアプリケーションが同時に複数起動している場合、AppleScriptからコントロールするのは大変です。InDesignのCS2とCS3が同時に起動しているケースとかいったものは、ユーザー環境では日常茶飯事です。そこで、Script実行時に複数のバージョンが同時に起動していたら、警告を発したり処理そのものを中止するといった対策が必要になります。そのため、同一のクリエーターコードで指定したアプリケーションのプロセスが複数起動していないかを検出するサブルーチンを作成した次第です。

スクリプト名:指定クリエーターコードを持つアプリケーションプロセスの個数を数える
countProcWithCreatorCode("CARO") of meAcrobat Professional
countProcWithCreatorCode("8BIM") of me –Acrobat Professional

指定クリエーターコードを持つアプリケーションプロセス(起動中)の個数を数える
on countProcWithCreatorCode(aCode)
  try
    tell application "System Events"
      set pList to every process whose creator type = aCode
      
return length of pList
    end tell
  on error
    return 0
  end try
end countProcWithCreatorCode

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

2008/05/29 ファイルのMac OS形式のフルパスのテキストから、ファイル名のみを取得

AppleScript Studioのアプリケーション中では、ファイルの名称を取得するのが大変です。Finderに対して命令してもダメ、System Eventsに命令してもダメ。アプリケーションにドラッグ&ドロップしたファイルの名称を取得してウィンドウのタイトル欄に表示しようとしても……できないということになります。Adobeのアプリのバグの多さにもうんざりさせられますが、Appleのバグの多さにも困ったものです。

注:普通のAppleScriptでは、Finderにファイルの名前を聞けば教えてくれます。本ルーチンはむしろ特殊環境用(AppleScript Studio用)です。

そこで、Mac OS形式のファイルパス(例: Macintosh HD:Users:someone:Documents:test.txt)を文字列として評価し、「:」で区切られたアイテムのうち、一番最後にあるものをファイル名として取り出します。

念のために書いておきますが、AppleScript Studioアプリケーション中ではない、通常のAppleScriptでは……ファイル名を求めるのはFinderに対してファイルのnameを取得するだけで楽勝で取得できます(4行ぐらい)。ここで紹介しているやりかたは、この通常の手段が利用できない場合の非常用の手段です。お間違えなく。

スクリプト名:ファイルのMac OS形式のフルパスのテキストから、ファイル名のみを取得
set a to choose file
set aStr to a as string
set aStr to aStr as Unicode text
set aRes to getLastLayerOfDirData(aStr) of me

テキストで与えられたパスデータから、最終階層のテキストのみを返す
on getLastLayerOfDirData(aData)
  set aColon to:as Unicode text
  
copy aData to bData
  
if bData ends with:then
    set bData to text 1 thru -2 of bData
  end if
  
  
set aLen to length of bData
  
set rData to reverse of (characters of bData)
  
set rData to rData as string
  
set dPos to offset of aColon in rData
  
set resData to text (aLen - dPos + 2) thru -1 of bData
  
return resData
  
end getLastLayerOfDirData

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

2008/05/29 フォルダ同士の内容比較

指定した2つのフォルダに入っているファイル(ファイル名)を比較して、差分を表示します。

スクリプト名:フォルダ同士の内容比較
set aFol to choose folder with promptフォルダAを選択してください。
set bFol to choose folder with promptフォルダBを選択してください。

tell applicationFinder
  tell folder aFol
    set aList to name of every file
  end tell
  
tell folder bFol
    set bList to name of every file
  end tell
end tell

set aHasNotBList to {}
repeat with i in aList
  set j to contents of i
  
if j is not in bList then
    set the end of aHasNotBList to j
  end if
end repeat

set bHasNotAList to {}
repeat with i in bList
  set j to contents of i
  
if j is not in aList then
    set the end of bHasNotAList to j
  end if
end repeat

if aHasNotBList is not equal to {} then
  display dialogフォルダAにあってBに存在しないもの:” & return & list2RETURNseparatedText(aHasNotBList) of me
end if

if bHasNotAList is not equal to {} then
  display dialogフォルダBにあってAに存在しないもの:” & return & list2RETURNseparatedText(bHasNotAList) of me
end if

リストをタブ区切りのテキストに変換
on list2RETURNseparatedText(aList)
  set curDelim to AppleScript’s text item delimiters
  
set AppleScript’s text item delimiters to return
  
set bList to aList as string
  
set AppleScript’s text item delimiters to curDelim
  
return bList
end list2RETURNseparatedText

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

2008/05/29 Acrobat Professionalで指定ページに移動

Adobe Acrobat Professionalで、現在オープンしているPDF書類中の指定ページに表示を移動します。

スクリプト名:Acrobat Professionalで指定ページに移動
tell applicationAdobe Acrobat Professional
  tell PDF Window 1
    goto page 4
  end tell
end tell

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

2008/05/29 Acrobat Professionalでしおりを全消去

Adobe Acrobat Professionalで、現在オープンしているPDFからしおりをすべて削除します。

スクリプト名:Acrobat Professionalでしおりを全消去
しおりを全消去
tell applicationAdobe Acrobat Professional
  tell document 1
    delete every bookmark
  end tell
end tell

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

2008/05/29 Acrobat Professionalでしおりを数える

Adobe Acrobat Professionalで、しおりの数を数えるサブルーチンです。

スクリプト名:Acrobat Professionalでしおりを数える
countBookmark() of me

しおりを数える
on countBookmark()
  tell applicationAdobe Acrobat Professional
    tell document 1
      set bCount to count every bookmark
    end tell
  end tell
  
return bCount
end countBookmark

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

2008/05/29 Pagesの最前面のドキュメントを閉じてラベルを付ける

Pages(バージョン3)で複数のドキュメントをオープンしている状態で、最前面のドキュメントをクローズして書類ファイルにFinderでラベルを設定するAppleScriptです。いろいろと書類を作って取捨選択する際にささっと書いて使ったものです。

Pagesでは、最前面の書類がdocument 1としてアクセスできるので(Windowと等価)、document 1に対してアクセスします。アプリケーションによっては、これとは異なる場合もあり(テキストエディタなど)、未知のアプリケーションのスクリプティングを行う場合には、そのような基本的な動作から確認すべきです。

スクリプト名:Pagesの最前面のドキュメントを閉じてラベルを付ける
tell applicationPages
  tell document 1
    set aPath to path
    
close
  end tell
end tell

set macPath to POSIX file aPath

tell applicationFinder
  set label index of macPath to 2
end tell

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

2008/05/29 Acrobat Professionalでしおりを作成(文字化け)

Adobeのアプリケーションには山のようにバグがあり、やることなすことAdobeのバグの前に阻まれ、アプリケーションを使おうとしているのかAdobeの作ったバグを回避しようとしているのか、だんだん分らなくなってしまいます。

これは、その端的な例でしょう。数年前からこのままです。Adobe Acrobat(バージョン8で確認)でPDFのしおり(Table Of Contents)をAppleScriptから作成できるのですが、しおりの文字に日本語を指定すると文字化けします。ちゃんとチェックして出荷しているのでしょうか? チェックしているなら仕事がいいかげんだし、チェックしていないならサボっているとしか思えません。

結局、Acrobatの機能を一切アテにせずにGUI Scriptingの機能を使ってAppleScriptを書いて機能を実現しましたが……

スクリプト名:Acrobat Professionalでしおりを作成(文字化け)
set atext toひよこさんas text日本語で指定すると文字化けする

tell applicationAdobe Acrobat Professional
  tell document 1
    set oCount to count every page
    
make bookmark at end
    
tell bookmark -1
      set name to atext
      
set destination page number to 3
    end tell
    
  end tell
end tell

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

2008/05/24 画面スナップショットのファイル形式を変更

Script Menuに入れておいて使用するAppleScriptです。Command-Shift-3やCommand-Shift-4のキーボードショートカットで画面キャプチャをとる時のファイルフォーマットを変更します。

スクリプト名:画面スナップショットのファイル形式を変更
set typeList to {"tiff", "png", "pdf", "jpeg", "gif"}
set aRes to choose from list typeList
set aRes to contents of item 1 of aRes

do shell script "defaults write com.apple.screencapture type " & aRes
do shell script "killall SystemUIServer"

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

2008/05/16 リストを任意のデリミタ付きでテキストにv2

以前に紹介したものはデリミタが固定でしたが、デリミタをパラメータで指定できるように変更したものです。リストで存在するデータをテキストの中に入れるとき、リストのままでは無理があるため句読点でつないだ列挙パターンの文字列に変換することを目的として作成しました。
(more…)

2008/05/16 テキストから余計な空白行を削除する

スクリプトエディタをコントロールして、指定のAppleScriptに含まれるハンドラ一覧とハンドラの直前に書かれているコメントを自動取得する際に作成したサブルーチンです。与えたテキストのうち、空白行のみ削除します。もう少し別のアプローチもありそうですが、手元にあったサブルーチンを組み合わせて手っ取り早く作ったものです。
(more…)

2008/05/14 指定文字列の中に指定リストの並びが含まれているかをチェック。含まれていたら起点のアイテム番号を、ない場合にはfalseを返す v2

「指定文字列の中に指定リストの並びが含まれているかをチェック。含まれていたら起点のアイテム番号を、ない場合にはfalseを返す」を改良したものです。とりあえず1つのアプリケーション名を取得するようには組んでみたものの、1つだけ取り出すのでは意味がなく……指定したAppleScriptからすべてのアプリケーション名称を取り出すようにすべく、検索開始位置を指定するパラメータを追加してみました。
(more…)

2008/05/14 指定文字列の中に指定リストの並びが含まれているかをチェック。含まれていたら起点のアイテム番号を、ない場合にはfalseを返す

Script Editorをコントロールして、さまざまな情報を取り出すことを目的として作成したものです。Script EditorでオープンしているAppleScriptから、「tell」「 」「application」「”」の続きを検出して、その後に続くアプリケーション名を取り出したりしています。
(more…)

2008/05/08 リストの中に指定のタグ付きテキスト要素によるトリミングを行う。結果はリストで返す

リスト形式で存在しているデータで、実はその中にInfo.plistのような構造のタグ付きテキストが入っているような場合の処理で作成したサブルーチンです。

つまり……AppleScriptで作ったアプリケーションがタグ付きテキスト形式でデータを保存していて、その保存先がテキストファイルではないために、取得するとリストで返ってくるようなケースに対応するためのものです。

リストをまるごとテキストに変換して、テキストとして処理してもよかったのですが……リストのまま扱えると便利なケースが多いので、リストのまま処理してみた次第です。応用範囲がなさそうでいて、その実、便利に使えています。

スクリプト名:リストの中に指定のタグ付きテキスト要素によるトリミングを行う。結果はリストで返す
set aList to {"<index>", "script1", "script2", "script3", "<a>", "test script G1", "</a>", "</index>"}

set {startTagText, endTagText} to {"<a>", "</a>"}
set sList to trimListItemByTaggedText(aList, startTagText, endTagText) of me
if sList = false then
  display dialog "Error Message"
end if
sList
> {"test script G1"}

リストの中に指定のタグ付きテキスト要素によるトリミングを行う。結果はリストで返す
on trimListItemByTaggedText(aList, startTagText, endTagText)
  –そもそも、指定のタグ付きテキストが、開始/終了テキストともに与えられたリストの中に入っていなかった場合、処理終了
  
if startTagText is not in aList or endTagText is not in aList then return false
  
  –
  
set sPos to retItemNoInList(aList, startTagText) of me
  
set ePos to retItemNoInList(aList, endTagText) of me
  
  –
startTagTextとendTagTextの間に何も存在しなかった場合はエラー
  
if sPos + 1 = ePos then return false
  
  –
結果を取り出す
  
set resList to items (sPos + 1) thru (ePos - 1) of aList
  
return resList
end trimListItemByTaggedText

指定項目のリスト中におけるシリアルサーチ
on retItemNoInList(aList, a)
  set aCount to 1
  
set hitF to false
  
repeat with i in aList
    if a = contents of i then
      set hitF to true
      
exit repeat
    end if
    
set aCount to aCount + 1
  end repeat
  
  
if hitF = true then
    return aCount
  else
    return false
  end if
end retItemNoInList

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

2008/05/08 スクリプトエディタ上のキャレットがある行に、ファイル名をコメントで展開

スクリプトエディタ自体も、AppleScriptからコントロールすることのできる「スクリプタブルな」アプリケーションであるため、AppleScriptによってさまざまな活用が行えます。本サイトで紹介しているように、サブルーチンを動作検証用の短いサンプルプログラムとともに保存して活用していますが……肝心のサブルーチンの先頭に「このルーチンはどのような動作を行うか」をコメントで書いておくことにしています。動作検証用コードは他のプログラムにコピーしませんが、サブルーチンと先頭のコメントは他のプログラムにまるごとコピーすることにしています。このコメントはそうした意味で必須のものなのです。

保存時に、「なるべく動作内容を把握しやすいファイル名で」保存することにしているため、そのファイル名と動作内容を記しておくコメントは……ほとんど、というよりも、「まるっきり一緒」ということになりがちです。

そこで、本スクリプトをScript Menuに入れておき、サブルーチンの先頭にカーソルを置いた状態でScript Menuから本スクリプトを実行すれば、ファイル名をそのまま選択位置にコメントで入れて、コンパイルまでしておいてくれるという仕組みです。個人的には、かなり便利に使っています。

途中「delay 0.1」でウェイトを入れているのは……ここでウェイトを入れないとうまく動作しなかったためで、まるで料理にふりかける一振りの塩のごとく、適切なウェイト命令は処理を適切に実行させる威力を発揮します。とくに、アプリケーションに対してコントロールを行うことがメインのAppleScriptにおいて、delay命令の持つ意義は大きなものになります。

sce1.jpeg

sce2.jpeg

sce3.jpeg

スクリプト名:スクリプトエディタ上のキャレットがある行に、ファイル名をコメントで展開

tell applicationScript Editor
  activate
  
tell window 1
    set a to name
    
    
set aText to” & a & return
    
set the clipboard to aText
    
  end tell
end tell

tell applicationSystem Events
  tell processScript Editor
    keystrokevusing {command down}
  end tell
end tell

delay 0.1

tell applicationScript Editor
  activate
  
tell document a
    compile
  end tell
end tell

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

2008/05/08 Safariのウィンドウを画面いっぱいに拡大する

ちょうどML上で話題になっていた内容です。Safariで表示中の最前面のウィンドウを画面いっぱいに拡大する、というテーマに対して……

(1)GUI Scriptingで拡大ボタンを押す
(2)AppleScript経由でJavaScriptを実行して画面いっぱいに拡大する
(3)SafariのWindowに対して、Zoomedをtrueに設定する
(4)画面の大きさを取得して、Safariの最前面のウィンドウをその大きさに強制設定する

といったアイデアが議論されていましたが、(1)と(3)は画面いっぱいになる保証はないし、(4)はかったるい(できるけど)ということから……消去法で(2)になるわけで……その(2)が以下のリストです。

スクリプト名:Safariのウィンドウを画面いっぱいに拡大する
tell applicationSafari
  tell document 1 to do JavaScriptjavascript:self.moveTo(0,0);self.resizeTo(screen.availWidth,screen.availHeight);
end tell

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

2008/05/06 レコードから特定要素を取り出し

レコード(例:{myName:”Piyomaru”, myPref:”Tokyo”})の内容を取り出すためには、myName of myRecordといったように、直接どの要素を取り出すかを指定することはできても、間接的に変数で指定(myVal of myRecord)することはできません。
(more…)

2008/05/06 リストをレコードに

リスト(例:{1,2,3})からレコード(例:{myAge:39, birthDay:”2008/8/8″})を作成するサブルーチンです。動的にAppleScriptを文字列で組み立て、run scriptコマンドで組み立てたAppleScriptを実行し、結果をファイルに書き出しておいて、最終的にファイル内容を読み出すという処理を行っています。
(more…)

2008/05/05 複数の条件を並記してwhoseフィルタ参照を記述

「whose」によるフィルタ参照の条件を複数記述する場合のサンプルです。AppleScriptにもいろいろ書き方がありますが、「it」とか「result」といった言葉を使うと、普通の英文にきわめて近い雰囲気になるためネイティブの英語話者には分りやすくなるかもしれませんが、日本人にとってはものすごく分りにくいものになってしまいます。

このため、「it」とか「result」は(自分は)極力使わずにAppleScriptを書くようにしているのですが、どうもこのケースだけは使わないと記述できないようです。

スクリプト名:複数の条件を並記してwhoseフィルタ参照を記述
set aFol to choose folder
tell application "Finder"
  tell folder aFol
    –ファイル名の末尾が"jpg"で終わり、かつラベルが付いていない
    
set fList to (every file whose name ends with "jpg" and label index of it = 0)
  end tell
end tell

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

2008/05/04 画像の縦長横長を見てフォルダ仕分け

1つのフォルダに入っている画像を、画像サイズを取得して縦長か横長かを判定して、それぞれのフォルダに仕分けします。

スクリプト名:画像の縦長横長を見てフォルダ仕分け
set a to choose folder with prompt画像フォルダを選択
tell applicationFinder
  set allF to every file in a
end tell

set b to choose folder with prompt出力先フォルダ(縦)を選択
set c to choose folder with prompt出力先フォルダ(横)を選択

tell applicationImage Eventsto launch
repeat with i in allF
  set j to i as alias
  
set bb to retDirectionOfImage(j) of me
  
if bb = false then
    tell applicationFinder
      move i to b
    end tell
  else
    tell applicationFinder
      move i to c
    end tell
    
  end if
end repeat

on retDirectionOfImage(aFile)
  tell applicationImage Events
    activate
    
set this_image to open aFile
    
set {aWidth, aHeight} to dimensions of this_image
    
close aFile
  end tell
  
if aHeight > aWidth then
    return false
  else
    return true
  end if
end retDirectionOfImage

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

2008/05/03 Database Eventsを起動して、オープン中のDBを数える

Database Eventsの起動方法(launch)と、オープン中のデータベースを数える方法、そして「Database Eventsがデータベースをオープンするには少々時間がかかる」ということを理解するためのサンプルです。アプリケーションのスクリプティングを行うための基本ともいえる確認内容ではありますが、「ああ、Database Eventsって命令を非同期実行するわけじゃないんだ」とか「データベースのオープンだけは非同期実行なんだ」とか「データベースをオープンしても、完全にオープンし終わるまで待ってあげないといけないんだ」といったことが分ってくるわけです。

スクリプト名:Database Eventsを起動して、オープン中のDBを数える
tell applicationDatabase Events
  launch
  
set dbRes to count every database
  
if dbRes is not equal to 0 then
    tell database 1
      set aRes to properties
      
    end tell
  end if
end tell

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

2008/05/03 Database Eventsで、既存のDBを指定してオープンする

Database Eventsで、既存のデータベース(Database Eventsで作成したもの)を指定してオープンするサンプルです。データベースのファイルパスはPOSIX pathで指定しておく必要があります。このあたり、Mac OS X上にのっているApple純正アプリケーションでも統一がとられておらず、もうちょっとなんとかならないのかと不満を覚えるところです。

スクリプト名:既存のDBを指定してオープンする
既存のDBを指定してオープンする
set dbPath to choose file

tell applicationDatabase Events
  try
    close every database
  end try
  
open database (POSIX path of dbPath) –POSIX Pathで渡さないとオープンできない
  
repeat
    set dCount to count every database
    
if dCount is not equal to 0 then exit repeat
    
delay 1
  end repeat
end tell

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

2008/05/03 Database Eventsで、すべてのDBをクローズして終了

Database Eventsは単にquit命令で終了させた場合とかquit delayで自動終了した場合でも、それまでにオープンしていたデータベースをクローズしてくれるわけではありません。任意の処理が終了したらデータベースはその都度クローズしておくのがセオリーです。

スクリプト名:すべてのDBをクローズして終了
tell applicationDatabase Events
  close every database
  
quit
end tell

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

2008/05/03 Database EventsのQuit Delayを指定

Database Eventsは、GUIなしアプリケーションであり、そのうえ起動してもDockにアイコンが表示されません。AppleScriptからquit命令を発行して明示的に終了させる方法が用意されているほか、指定時間(単位:秒)の間なにもDatabase Eventsに対して命令が出されない場合には自動終了するよう指定しておくことができます。それが、「quit delay」です。quit delayに0を指定した場合には、自動終了は行われません。

スクリプト名:Database EventsのQuit Delayを指定
tell applicationDatabase Events
  set quit delay to 3600単位:秒
end tell

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

2008/05/03 Database Eventsを終了する

Database Eventsを終了します。

スクリプト名:Database Eventsを終了する
tell applicationDatabase Events
  quit
end tell

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

2008/05/03 Database Eventsでパスを指定してDBを作成する

よそで見かけたScriptを日本語環境で動くかどうか、日本語のデータを入れて動作確認したものです。

デスクトップに「スーパーヒーロー2」という名前のデータベースファイルを作成し、リストの内容をデータベースに格納します。

Datanase Eventsは「ソートができない出来損ないのデータベース」ととらえることも可能ですが、その一方で……AppleScriptの各種フィルタ参照でアクセスできる便利なストレージでもあり、リスト型変数だけでは行えないデータ抽出を自由に行える「器」ともいえます。

ソートに関しては自力でAppleScriptのサブルーチンを用いれば行えるため、まずはメリットを最大限に活用したほうが得策かもしれません。

スクリプト名:パスを指定してDBを作成する
パスを指定してDBを作成する

set theSuperHeroes to {{”バットマン“, “ブルース・ウェイン“}, {”スパイダーマン“, “ピーター・パーカー“}, {”スーパーマン“, “クラーク・ケント“}}
tell applicationDatabase Events
  set theDatabase to make new database with properties {name:”スーパーヒーロー2“, location:path to desktop from user domain}
  
tell theDatabase
    repeat with a from 1 to length of theSuperHeroes
      set theCurrentSuperHeroInfo to item a of theSuperHeroes
      
set theRecord to make new record with properties {name:item 1 of theCurrentSuperHeroInfo}
      
tell theRecord
        make new field with properties {name:”正体“, value:item 2 of theCurrentSuperHeroInfo}
      end tell
    end repeat
  end tell
end tell

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

2008/05/02 指定の名称およびバージョンに該当するアプリケーションプロセスが起動しているかどうかをチェック

指定の名称およびバージョンのアプリケーションが起動しているかどうかをチェックするサブルーチンです。

スクリプト名:指定の名称およびバージョンに該当するアプリケーションプロセスが起動しているかどうかをチェック
set apName to "Microsoft Excel"
set apRes to getExistenceOfRunnningProcess(apName, "12.") of me
Excel 2008が起動していればtrue、起動していなければfalseが返る

指定の名称およびバージョンに該当するアプリケーションプロセスが起動しているかどうかをチェック
on getExistenceOfRunnningProcess(apName, apVer)
  tell application "System Events"
    set exF to exists of application process apName
    
if exF = true then
      tell application process apName
        set apProp to properties
        
set apFile to file of apProp
      end tell
    else
      return false
    end if
  end tell
  
tell application "Finder"
    set aVer to version of apFile
  end tell
  
if aVer begins with apVer then
    return true
  else
    return false
  end if
end getExistenceOfRunnningProcess

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

2008/05/02 入り組んだリストの中に指定要素が存在するかどうかをチェック

{{1, 2, 3}, {4, 5, 6}, {7, 8, 9, {-1, -2, -3}}} ……のような入り組んだリスト型変数の中に、指定の要素が含まれていないかどうかをチェックするサブルーチンです。
(more…)