上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

--/--|スポンサー広告||TOP↑

※このエントリは、あなたがこれを読んでいる時点ですでに解消されているかもしれない問題について書かれています。

何の話かというと Finder の項目名です。このエントリを書いている2006年3月22日の時点で、OS X 10.4.5 上で動作している AppleScript は Finder 項目名のひらがなとカタカナを区別しません。

論より証拠ということで実際やってもらった方がいいでしょう。
まずデスクトップにひらがなで「てすと」という名前のフォルダを作ってください。
つぎに今作った「てすと」フォルダを Finder 上で選択してから、以下のスクリプトを実行してみてください。

tell application "Finder"
set theItem to (item 1 of (selection as list))
if (name of theItem) is "テスト" then
display dialog "この項目の名前は「テスト」です。"
else
display dialog "この項目の名前は「テスト」ではありません。"
end if
end tell

kana.jpg
こうなります。
アルファベットの大文字小文字の違いと、日本語のひらがなカタカナの違いを開発者が混同しているのではないかと思います。

次のスクリプトはデスクトップに「テスト」という名前のフォルダがあれば「テスト 2」というフォルダを作る。「テスト」「テスト 2」というフォルダがあれば「テスト 3」というフォルダを、というように「名前+半角スペース+番号」という名前をつけていくものですが、デスクトップに「テスト」というフォルダがなくても「てすと」というフォルダがあると最初に作成されるフォルダ名は「テスト 2」になってしまいます。

tell application "Finder"
if not (exists folder "テスト" of (path to desktop folder)) then
make new folder at (path to desktop folder) with properties {name:"テスト"}
else
set curNum to 2
repeat
if not (exists folder ("テスト " & curNum as text) of (path to desktop folder)) then
make new folder at (path to desktop folder) with properties {name:("テスト " & curNum as text)}
exit repeat
else
set curNum to (curNum + 1)
end if
end repeat
end if
end tell

この現象を考慮しないでいると、気付かずに目的外の項目を移動したり削除してしまう恐れがあります。
デスクトップに「3カラムvs2カラム」というフォルダと「インターネットにからむ犯罪」というフォルダを作成して次のスクリプトを実行し、ゴミ箱を覗いてみてください。

tell application "Finder" to delete (every folder of (path to desktop folder) whose name contains "カラム")

これでは困りますね。

なるべく名前以外の条件で項目を判別するように心がければ良いのですが、どうしても名前で、という場面もあるかと思います。
対処として URL of を使う方法を考えてみました。
最初のスクリプトを以下のように書き換えてみます。

tell application "Finder"
set theItem to (item 1 of (selection as list))
set theURL to (URL of theItem)
set encodedItemName to (do shell script "basename " & (quoted form of theURL))
if encodedItemName is "%E3%83%86%E3%82%B9%E3%83%88" then
display dialog "この項目の名前は「テスト」です。"
else
display dialog "この項目の名前は「テスト」ではありません。"
end if
end tell

選択項目の名前を URL エンコードした結果が「%E3%83%86%E3%82%B9%E3%83%88」であれば「テスト」である、そうでなければ「テスト」でない、という判別の仕方です。これで「テスト」と「てすと」を区別させることができるはずです。
この方法を使う場合、対象となる名前がたとえば「テスト」なら、「テスト」をエンコードした文字列が「%E3%83%86%E3%82%B9%E3%83%88」であることをあらかじめ知っておく必要があります。エンコードされた文字列を取得する方法は色々ありますが、今回は「テスト」というフォルダを作って選択状態にし、

tell application "Finder" to set x to URL of (item 1 of (selection as list))
do shell script "basename " & quoted form of x

で取得しました。
basename というのはスラッシュ区切りのパス文字列から項目の名前だけを取り出すコマンドだそうです。

また、上記以外の方法でエンコードする場合は、Finder から AppleScript を用いて取得した項目名が iconv でいうところの UTF-8-MAC つまり濁点・半濁点が仮名と分離して一文字として扱われている状態であること、URL of で取得できるのがそういう文字列をエンコードした値であること、などに留意する必要があると思います。

おまけ:
ガチャコンX のカプセルをオモチャの名前にリネーム


追記:
エンコードなんかしなくても取得した文字列を as text すればいいみたいです。

tell application "Finder"
set theItem to (item 1 of (selection as list))
if (name of theItem) as text is "テスト" then
display dialog "この項目の名前は「テスト」です。"
else
display dialog "この項目の名前は「テスト」ではありません。"
end if
end tell

ただし、as Unicode text とするとやっぱりだめorz

tell application "Finder"
set theItem to (item 1 of (selection as list))
if (name of theItem) as Unicode text is "テスト" then
display dialog "この項目の名前は「テスト」です。"
else
display dialog "この項目の名前は「テスト」ではありません。"
end if
end tell


さらに追記:
うああやっぱだめだ!

tell application "Finder"
set x to "テスト" as text
exists folder x of (path to desktop folder)
end tell


さらにさらに追記:
しょうがないので代替案。

exists folder ~ の代替
デスクトップ直下に「ボート」を含む名前のフォルダがあれば true、なければ false を返す。

tell application "Finder" to set theFolder to (path to desktop folder)
set theWord to (do shell script "echo \"*ボート*\" | iconv -f UTF-8 -t UTF-8-MAC")
(do shell script "find " & quoted form of POSIX path of theFolder & " -name " & (quoted form of theWord) & " -type d -maxdepth 1") is not ""

every folder of ~ whose name contains ~ の代替
デスクトップ直下で名前に「ボート」を含む名前のフォルダをゴミ箱へ移動。(円記号をバックスラッシュに直さないと実行できません。)

tell application "Finder" to set theFolder to (path to desktop folder)
set theWord to (do shell script "echo \"*ボート*\" | iconv -f UTF-8 -t UTF-8-MAC")
do shell script "find " & quoted form of POSIX path of theFolder & " -name " & (quoted form of theWord) & " -type d -maxdepth 1 -exec mv {} ~/.Trash \\;"


追記2006-07-22:
コメント欄でご指摘をいただきました。

if (name of theItem) is "テスト" then

のかわりに

if (name of theItem) is in "テスト" then

と書いた場合は、ひらがなとカタカナを正しく区別してくれるようです。

ただ、これだけだと「テ」「テス」という項目名も真になってしまうので、教えていただいたスクリプトを一部改変してみます。

tell application "Finder"
set theItem to (item 1 of (selection as list))
set bool1 to ((name of theItem) is in "テスト")
--文字列"テスト"の中に項目名が含まれていれば真
set bool2 to ("テスト" is in (name of theItem))
--項目名の中に文字列"テスト"が含まれていれば真
if {bool1, bool2} = {true, true} then --両方とも真なら
return "この項目の名前は「テスト」です。"
else
return "この項目の名前は「テスト」ではありません。"
end if
end tell

おおっ、なんかいいっぽい。
教えてくださった t.b.d.w さんに感謝です。ありがとうございました^^

("管理人のみ閲覧"モードでコメントをいただいたのでお名前は伏せましたが、名前を掲載しても差し支えなければその旨ご連絡ください<(_ _)>)


追記2006-11-03
あれ、もしかすると is in を使うなら {"テスト"} のようにリストにして

tell application "Finder"
set theItem to (item 1 of (selection as list))
if (name of theItem) is in {"テスト"} then
return "この項目の名前は「テスト」です。"
else
return "この項目の名前は「テスト」ではありません。"
end if
end tell


でいいのかも。
よくわからなくなってきました。

スポンサーサイト

03/22|AppleScriptコメント(6)トラックバック(0)TOP↑
この記事にコメント
管理人のみ閲覧できます
このコメントは管理人のみ閲覧できます
From:  * 2006/07/22 04:37 *  * [Edit] *  top↑
管理人のみ閲覧できます
このコメントは管理人のみ閲覧できます
From:  * 2006/07/22 23:31 *  * [Edit] *  top↑
Re:AppleScript がひらがなとカタカナを区別してくれません(><)
 管理人さんこんばんは、t.b.d.wです。
「テ」「テス」問題、わたしも気が付かなかったです。。多謝(笑
今まで製作したプログラム、、
この原因でバグがあったモノもあるかもしれません、、「(^^; )

if ○○○ is ○○○ then は、

if ○○○ = ○○○ then 

"is" と "is in" の機能が違うコトは、以前から知っていましたが、、
平仮名、片仮名を区別しないコトを今回、はじめて知りました。 ヽ(*´-`*)ノ

今まで使わなかったけど、
今更ながら、Asの"selection"、使ってみると便利ですね。。
昨日、投稿したプログラムの修正版を作ってみました。当社比120%?(笑
-- いい方法が見つかるまでこのプログラムで我慢、我慢。。w
-- 長文なので管理人のみ閲覧"モードに投稿します~
-- 管理人さんのトコロで動くかな?、、ん~OSX 10.3~で動くと思います。。??

では、返信ありがとうございました。 (*^^*)/
From: t.b.d.w * 2006/07/24 02:18 * URL * [Edit] *  top↑
管理人のみ閲覧できます
このコメントは管理人のみ閲覧できます
From:  * 2006/07/24 02:28 *  * [Edit] *  top↑
承認待ちコメント
このコメントは管理者の承認待ちです
From:  * 2015/03/01 22:01 *  * [Edit] *  top↑
承認待ちコメント
このコメントは管理者の承認待ちです
From:  * 2015/03/02 05:55 *  * [Edit] *  top↑
名前:
コメントタイトル:
メールアドレス:
URL:
コメント:

パスワード:
管理人だけに表示:
管理者にだけ表示を許可
この記事にトラックバック
プロフィール

AquaBowler

  • Author:AquaBowler
  • 現在の Mac 環境:
    iBook Late2001
    Mac OS X 10.4.11
フリーエリア
最近の記事
最近のコメント
最近のトラックバック
月別アーカイブ
カテゴリー
ブログ内検索
RSSフィード
リンク
del.icio.us
feed meter

RSS feed meter for http://kotoerisan.blog16.fc2.com/

FC2カウンター
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。