それでは、対策を練りましょう。
さてこれは「あなたとわたしのちがい」ですね…(>_<)
私は新規書類保存時のデフォルト・エンコーディングは UTF-16 にしてあります
私はテキストエディットでUTF-8を使ってます…。
で、なぜファイルの文字コードは UTF-8 でないといけないのでしょうか?
set s to read fileRefNo as «class utf8»
↑そう、私がUTF-8で読み込むように造ったからです(T_T)
特にここは問題解決のデータベースとして長期間残されるものですので、できればそういうやりとりの痕跡も残しておいた方が便利かなと...。)
AppleScriptに興味を持っている方がいるかもしれないので
具体的な事も少しだけ記録しておきましょうか。
«class utf8» を Unicode text に置換すれば、UTF-16で扱えます。
実はコレ、スクリプティング中に引っかかったのですが、
はじめUnicode textを使ってみたところ、
エラーが起きるのでわざわざ置換したのですよね。
(私がUTF-8のテキストファイルでテストしていたため)
ですから、ほんの1行だけ書き換えて
set s to read fileRefNo as Unicode text
にしてしまえばいいのだけれど、せっかくなので
どちらでも自動対応出来るように強引な手法をとってみました。
はじめは符号化方式をユーザに選択させようと思ったのですが
シンプルにしたいので、エラーが出たらUTF-16で
読み込み直させると言う乱暴な方法にしました。
-1700のエラーコードは他の場合にも発生しうるので、
これは"正しい"やり方ではないのですけれど(>_<)
(つまり、UTF-8だめならUTF-16でリトライするが、それ以外ダメ)
そもそも読み込ませるテキストファイルを処理するだけのスクリプトだし、
しい坊さんのよく使うUTF-16に対応出来れば十分だと…(逃)
シンプルタスクなので目的達成さえ出来れば…いい…かと…(消)
--------------------------
global i, j, k, x, s
on openitemList
set i to 1
set j to 0
set k to 0
set x to 0
tell application "Finder"
try
set targetList to (first item of itemList) as alias
my Making(targetList)
on error errMsg number errNo
if errNo is -128 then
display dialog "キャンセルされましたので終了します" with icon 2
quit
end if
end try
end tell
end open
on run
set i to 1
set j to 0
set k to 0
set x to 0
tell application "Finder"
try
set targetList to choose file with prompt "自動生成したいフォルダ名のリストの記載されたテキストファイルを選択してください。"
my Making(targetList)
on error errMsg number errNo
if errNo is -128 then
display dialog "キャンセルされましたので終了します" with icon 2
quit
end if
end try
end tell
end run
to Making(theTargetList)
local ss, sss
set s to ""
set ss to ""
set sss to ""
try
set destFolder to choose folder with prompt "フォルダを自動生成する場所を選択してください。"
set s to readFile(theTargetList)
(* 下記の部分を新たに追加した、上の行のreadFile関数に置き換えて、UTF-16にも対応出来るように変更しました。
set fileRefNo to open for access theTargetList
set s to read fileRefNo as «class utf8»
close access theTargetList
*)
set j to count paragraph of s
repeat until (i > j)
set folderName to paragraph i of s
if (not ({folderName} is in (list folder destFolder without invisibles))) then
if (folderName is not equal to "") then
tell application "Finder"
set resultFolder to makenewfolderatdestFolderwith properties {name:folderName}
end tell
else
set x to x + 1
end if
else
set k to k + 1
end if
set i to i + 1
end repeat
tell application "Finder" to set ss to "フォルダ「" & (name of destFolder) & "」内に" & return & ((j - k - x) as text) & "個のフォルダを作成しました。"
if k > 0 then
set sss to (k as text) & "個のフォルダが既に存在していたため作成されませんでした。"
end if
display dialogss & return & ssswith icon 1
on error errMsg number errNo
if errNo is -128 then
display dialog "キャンセルされましたので終了します" with icon 2
quit
else
display dialogerrNo
close accesstargetList
end if
end try
end Making
to readFile(theTarget)
try
set fileRefNo to open for accesstheTarget
set s to read fileRefNo as «class utf8»
close accesstheTarget
on error errMsg number errNo
if errNo is -1700 then
set s to read fileRefNo as Unicode text from 1
close accesstheTarget
else
display dialogerrNo
close accesstheTarget
end if
end try
return s
end readFile
-----------------------------