homeホームHTMLに役立つヒント> ガラクタAppleScript

ガラクタAppleScript

 AppleScriptのガラクタ入れ。大したものはないので気にしないように。んで、このページ、「HTMLに役立つ」わけではないので、そのうち引っ越しする予定です。さて、どこに引っ越すか…。

 このページでは、いちおう単独のスクリプトを紹介。メモ・覚え書き・ルーチンなどはこちら


■■ 目次 ■■


Adobe Illustrator 9.0.2にテキストを1行ずつ貼り込む ▲ページトップ

 Illustratorで地図を作りなさいと。ウ〜ム。問題なのは道路名、建物名、公園、目標物、駅名、etcを張り込まなくてはいけないこと。

 1行1データのテキストをもらえるのはいいんですが、何しろ1地図あたり70個とか100個とか貼り込む文字列があるんですね。1行ずつコピーしてイラストレーターにペーストしていくだけで腱鞘炎になりますって。

 で、クリップボードの中味を、1行ずつ切り出してイラストレーターに貼り込んでいくスクリプトを作りました。調べてみましたが、類似のスクリプトはないみたいです。皆さん、どうやって大量のテキストデータを貼り込んでいるんだろう?

 アップルスクリプトを使うので、イラストレーター9以上でなくてはいけません(10では未確認)。9.0に付属の「ScriptingSupport」をIllustratorの「プラグイン」フォルダにいれておいてください。こうしないとIllustratorはアップルスクリプト対応になりません(ちなみに9.0では動きません。9.02にアップしてください)。

使い方はこんな風

(1)最初にJeditとかSimpleTextとか、なんでもいいのでテキストを開いてセレクトオール、コピーして、クリップボードにリスト(文字列データ)を入れます。

●文字列データの例 1行1データで作成

千駄ヶ谷駅前(交)
モスバーガー
東京体育館前(交)
鳩森八幡前(交)
  ・
  ・
  ・

(2)その後このスクリプトを実行します。張り込みが始まります。エラー処理もしていないので動かなかったらごめん。

 あ、貼り込むときにクリップボードを利用しているので、最初にクリップボードに取りこんだデータはクリップボード上からなくなりますのでご注意。

 うちの環境(G3/400MHz)だと70行を15秒程度で貼り込んでくれます。ラクチンラクチン。同じ位置にペーストするので、終わったら適当に「整列」させるとよいです。

--Adobe Illustrator9に付属の「Scripting Support」が必要です。
-- ver.0.1 2002/12/16

--1. 張り込みたい文字列のリストをクリップボードに入れます。1行1データにします。
--2. このスクリプトを走らせます。

set allTxt to (the clipboard) as text ---クリップボードの中身を取得

tell application "Adobe Illustrator 9.0.2"

set lastDelimit to AppleScript's text itemdelimiters --- デリミタ(区切り文字)をとっておく
--- デリミタ(区切り文字)をCRに
set AppleScript's text item delimiters toASCII character (13)

--- every text item of ○○としてデリミタでリストに分解
set allTxt toevery text item ofallTxt

set AppleScript's text item delimiters tolastDelimit --- デリミタ(区切り文字)を元に戻す

activate
--display dialog item 1 of allTxt as text --デバッグ用

set i to 1 --初期化
set max to count item of allTxt --アイテムの数を数える
repeat
set the clipboard to item i of allTxt as text --1つずつクリップボードへ
paste --張り込む

set i to i + 1

if i > max thenexitrepeat--アイテム数だけ繰り返したら抜ける
end
repeat
beep
display dialog "終わりました。"

endtell

 さて、実はくだんの地図、Illustrator8で作るようにいわれているのである。しょうがないので9.02でテキストを貼り込んだ後、8.0に移して使っているのであった。とほほ。

ダウンロードはこちら「Illustrator文字取り込み」 利用・改造・改造品の再配布などご自由にどうぞ。
 デリミタをCRからtabに変更すればタブ区切りテキストにも対応できるはず。
 最初にクリップボードに取りこんだデータがなくなるのはいやだという方は、最後にallTxtをCRでつなぎ直してクリップボードに入れ直すといいでしょう。
 また、本来は「make new text art items」を使ってテキストを貼り込むべきなんでしょう。が、どうもこの命令、使い方がイマイチよくわかんなかったんです。誰か作り直してって感じです。


パスを取得する ▲ページトップ

 AppleScriptやMacPerlで困るのが、パスの取得。UNIXなんかでは「/usr/local/bin/perl」なんて書き方でディスク内のファイル/ディレクトリの位置を表します。これがパスです。

 で、AppleScriptやMacPerlなどでも、このパスを調べなくてはいけない場面があります。MACの場合、区切り文字は「:」になりますので、「MacintoshHD:Desktop Folder:スクリプト関係」なんて感じになります。

 このスクリプトは、ファイルやディレクトリをドラッグ&ドロップすると、そのファイルのパスを表示し、「OK」ボタンを押すとクリップボードに取り込む、というものです。複数のドラッグ&ドロップに対応していますが、クリップボードに取り込まれるのは最後に「OK」したパスだけです。

--ver.0.2 2002/9/9
--ver.0.1 2002/5/29

on
open dropLIst
repeatwith thisItem in dropLIst --リストがなくなるまで処理を繰り返す
display dialog (thisItem as string) & return & return& "OKでクリップボードにコピー。"
set the clipboard to thisItem as string
endrepeat
end
open

 ドロップアプリとして使うため、「アプリケーション」として保存して使ってください。

ダウンロードはこちら「パス取得」 利用・改造・改造品の再配布などご自由にどうぞ。


ASCIIナンバー調べ ▲ページトップ

 AppleScriptで改行コードだの何だのを指定する場合、「ASCIIcharacter(xx)」なんて書かなくちゃいけないことがある。いちいちコード表を調べるのが面倒だったので、文字を入力するとコード番号を返してくれるツールを作った。

display dialog "文字を入力して。ASCII(10進数)を返すよ。" & return ツ
& "LFは10、CRは13、tabは9だよ。" & return default answer "a"
setorgMojito text returned ofresult

setasciiMojito ASCII number orgMoji

display dialog "「" & orgMoji &"」のASCIIは次の通り。 OKでクリップボードにコピー。" & return & "ASCII character ("& asciiMoji & ツ
")" & ":" & (ASCII character (asciiMoji))

settoTextto "ASCII character (" & asciiMoji & ")"
set the clipboard to toTextas string


16/10進数変換 ▲ページトップ

 16進数と10進数を相互に変換するツール。これは僕の作ではありません。出典は「http://www.tonbi.jp/AppleScript/tips/Data/16.html」です。ルーチンはそのまんま使わせていただきました。インターフェースをつけただけです。

settmpto (display dialog "" defaultanswer "" buttons {"16進数へ", "10進数へ", "キャンセル"})

if button returned oftmp = "10進数へ" then
display dialog "" default answer myhex2dec(textreturned oftmp)
elseif button returned oftmp ="16進数へ" then
display dialog "" default answer mydec2hex(textreturned oftmp)
endif

onhex2dec(theHEX)
settheDECto 0
repeatwithcurCharintheHEX
repeat
withifrom 0 to 15
if (character (i + 1) of"0123456789ABCDEF") = (curChar) as string thenexitrepeat
end
repeat
set
theDECtotheDEC * 16 + i
end
repeat
return
theDEC
end
hex2dec

ondec2hex(theDEC)
iftheDEC = 0 thenreturn ""
returndec2hex(theDECdiv 16) &(character ((theDECmod 16) + 1) of"0123456789ABCDEF")
enddec2hex


homeホームHTMLに役立つヒント> ガラクタAppleScript