文字列中の文字/文字列スキャンを行う「offset of」命令を高速化するAppleScriptです。
AppleScript標準装備の「offset of」の処理を横取りして、自前でAppleScriptのコマンドで実行すると2.5倍以上高速になります。発見者に敬意を表して「Jun Araki Method」と呼んでいます。
オリジナルからの改変を行なったポイントは、macOS 10.10以降のAppleScriptObjC(Cocoaの機能を利用するAppleScript)の中に書いたときへの対処として「using terms from scripting additions」句でくくっている点です。Cocoaを使わないOLD Style AppleScriptではこの「using terms from scripting additions」節は必要ありません。
# 書籍「AppleScript最新リファレンス」からのリンクURLがBlog消失後に修復されていなかったので、再掲載しました。書籍側のリンクURLは簡易PDFビューワー「PiyoReader」で変更を吸収できます
AppleScript名:offset ofの高速実行 |
use AppleScript version "2.4" use scripting additions use framework "Foundation" set aDate to current date repeat 100000 times set aStr to "abcdefghi" using terms from scripting additions set aRes to offset of "c" in aStr end using terms from end repeat set bDate to current date –結果表示 display dialog (bDate – aDate) as string –> 通常で5秒、offset ofをフックして自前のサブルーチンで実行すると2秒 –offset命令の実行を横取りする on offset of searchStr in str set aRes to getOffset(str, searchStr) of me return aRes end offset on getOffset(str, searchStr) set d to divideBy(str, searchStr) if (count d) is less than 2 then return 0 return (length of item 1 of d) + 1 end getOffset on divideBy(str, separator) set delSave to AppleScript’s text item delimiters set the AppleScript’s text item delimiters to separator set strItems to every text item of str set the AppleScript’s text item delimiters to delSave return strItems end divideBy |
More from my site
(Visited 149 times, 1 visits today)