スポンサーサイト

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

AppleScriptでカタカナの『ピ』が置換できない?

◆追記◆
以下、寝言エントリ




物凄く浅い所で引っ掛かってます。

何の変哲も無い、ファイル名の文字列を置換するスクリプトですが、

on open drop
   tell application "Finder"
      set targetStr to text returned of (display dialog "古い文字列を入力" default answer "")
      set newStr to text returned of (display dialog "新しい文字列を入力" default answer "")
      repeat with theFile in drop
         set fName to name of theFile
         set AppleScript's text item delimiters to targetStr
         set fName to text items of fName
         set AppleScript's text item delimiters to newStr
         set fName to fName as string
         set name of theFile to fName
      end repeat
   end tell
end open


OS Xでは『AppleScript's text item delimiters』にカタカナの『ピ』が含まれている文字列をセットすると正しく置換しない…というか何も起こってくれません。(OS X 10.3と10.4で確認。他にもダメな文字があるかも知れない。)


仕方がないので再発明しました。(いびつな車輪を)

----Finderでのエラー処理は無し----

on open drop
   tell application "Finder"
      set targetStr to text returned of (display dialog "古い文字列を入力" default answer "")
      set newStr to text returned of (display dialog "新しい文字列を入力" default answer "")
      repeat with theFile in drop
         set fName to name of theFile as string
         set fName to my replace_Text(targetStr, newStr, fName)
         set name of theFile to fName
      end repeat
   end tell
end open



on replace_Text(targetStr, newStr, baseText)
   set startPoint to 1
   set baseTextLen to length of baseText
   set targetLen to length of targetStr
   set tmpStr to ""
   repeat
      set processStr to (items startPoint thru -1) of baseText as string
      set processLen to length of processStr
      if processStr contains targetStr then
         set divList to {"", ""}
         set ofst to (offset of targetStr in (processStr))
         if ofst is not 1 then
            set 1st item of divList to (items 1 thru (ofst - 1)) of processStr as string
         end if
         if (length of (1st item of divList)) + targetLen < processLen then
            set 2nd item of divList to (items (ofst + targetLen) thru -1) of processStr as string
         else
            set processStr to ""
            set tmpStr to tmpStr & 1st item of divList & newStr
            exit repeat
         end if
         set startPoint to baseTextLen - (length of (2nd item of divList)) + 1
         set tmpStr to tmpStr & 1st item of divList & newStr
      else
         exit repeat
      end if
   end repeat
   return tmpStr & processStr
end replace_Text


『 のコピー』を取るだけなら、

on open drop
   tell application "Finder"
      repeat with theFile in drop
         set fName to name of theFile
         do shell script "echo " & quoted form of fName & " | sed 's/ のコピー//'"
         set name of theFile to result
      end repeat
   end tell
end open


の様にシェルスクリプト使うのが手っ取り早いです。(メタ文字のエスケープが必要ですが)quoted formで解決。
関連記事
スポンサーサイト

コメント

非公開コメント

Profile
choco
Author : choco

印刷・製版の現場を経て、広告制作会社でPhotoshopを使ったビジュアル制作を担当。

→現在は車載機器開発ベンダにて、組み込み3Dデータ作成やUIデザインなどを行っています。

Categories
Favorites


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