AppleサポートAppおよびYouTubeチャンネルのお知らせ

* iOS向けAppleサポートAppのバージョン5.6.1が公開されました。

YouTube - Apple Japanチャンネルで有用なヒントや使い方を配信中です。

コミュニティでの投票方法と通知設定

コミュニティでの投票方法や通知の設定方法に関する記事を公開しました。

Apple Account(Apple ID)の不正利用を確認する方法

Apple Accountに関するよくある質問についてはこちらのページを、また不正利用を確認する方法についてはこちらのドキュメントをご参照ください。

しばらく返答が寄せられていないようです。 再度ディスカッションを開始するには、新たに質問してください。

エディタ上のリストを元に複数のフォルダを自動で生成する方法は?

仮に(例えばエディタ上に)以下のような名簿などのリストが複数(例えば100項目)あったとします。


ABC1111-山田太郎

ABC1112-小林花子

ABC1113-織田信長

ABC1114-豊臣秀吉




これらの項目ごとに独立したフォルダを作りたい場合に(要するに、これらの個人別にファイルを保存するフォルダを作りたい場合に)、事前にこのようなリストができていたときに、そのまま自動でそれらをフォルダの項目名として新規フォルダを作成する方法はないのでしょうか?


いちいち手動で新規フォルダを作成して、そこに一覧からコピペを繰り返すのは煩雑ですし、間違いの元です。


自分で Apple Script を書くしかないのかしら...?

--------------------

Apple 17" MacBook Pro (Intel Core 2 Duo T7600/2.33 GHz/3 GB RAM/500 GB HDD)

Mac OS X 10.6.2 (Build 10C540) [Snow Leopard]

MacBook Pro, Mac OS X (10.6.2), 17" Intel Core 2 Duo T7600/2.33 GH

投稿日 2010/02/09 10:54

返信
返信: 39

2010/02/09 22:38 はちぽち への返信

"なぜAppleScriptによる回答がないのか不思議。"

この発言の真意は批判的な意味ではなくって、

ええ、もちろん理解してます。

色々な手段を紹介できれば、それぞれの趣味にあった方法を選択できますので、良いことだと思いますよ。


AppleScriptも少しは覚えたんですが、どうもなじめなくて...^_^;;

2010/02/10 11:49 Hiro__S への返信

mkdir()の引数ですがやっと分かりました。


MacOSX 10.6.x の Perl: v5.10.0

MacOSX 10.5.8 の Perl: v5.8.8


http://perldoc.perl.org/perl593delta.html#mkdir()

> mkdir()

> mkdir() without arguments now defaults to $_ .


だから Snow Leopard では mkdir() の引数が無くても動くんですね。納得。(Hit-Cさんを疑ってた訳ではないですからお気を悪くなさらないでくださいね...)


ということでワンライナー版を置いて帰ります。

#printなし

perl -nle 'mkdir();' folders_list.txt

perl -nle 'mkdir($_);' folders_list.txt


#printあり

perl -ple 'mkdir();' folders_list.txt

perl -ple 'mkdir($_);' folders_list.txt


では。

2010/02/10 11:53 Hiro__S への返信

やはりperlのバージョン依存でしたか。だとすると、むやみに省略しないほうが人に教えるときは安全ですね。

ということでワンライナー版を置いて帰ります。

すばらしい!素人にはたいへん勉強になります。_o_

ありがとうございました。


というこで、しい坊さんも、ぜひワンライナー版で試してみてください。

2010/02/11 18:45 Hit-C への返信

Hit-C さんによる書き込み:

Hiro.S さんによる書き込み:


ということでワンライナー版を置いて帰ります。

[...]


というこで、しい坊さんも、ぜひワンライナー版で試してみてください。


あのぉ...。こっちはプログラミングは全く素人なんで“ワンライナー版”と言われても何のことかさっぱりわかりません (^◇^;)。「“ワンライナー”って何 (・_・;)?」の世界です。


さらに Hiro.S さんが書かれている


「#printなし」と「#printあり」も「??」です (^^;)。


--------------------

Apple 17" MacBook Pro (Intel Core 2 Duo T7600/2.33 GHz/3 GB RAM/500 GB HDD)

Mac OS X 10.6.2 (Build 10C540) [Snow Leopard]

2010/02/11 19:00 はちぽち への返信

はちぽち さんによる書き込み:

しい坊 による書き込み:


もっとも「名称未設定フォルダ」というのが1つ余計に作成されましたが...。恐らくこれはフォルダ名のリストの最後の項目に改行コードが入っていたために次の行に何も文字列のない項目が存在すると判断されたのでしょうね。


そこで、今度はフォルダ名のリストの最後の項目の末尾から改行コードを削除してからやり直してみたら、今度は「名称未設定フォルダ」は作成されませんでした (^^)。


改行を区切りにパラグラフ分割するので、余分なひとつが出来ていたのですね。

余分な改行コードがある場合に無視するよう、編集修正しておきました。



訂正版はバッチリうまく動きました (^^)


(ちなみにスクリプトを更新されるときには、オリジナルのご発言のスクリプトの部分を書き換えてしまうのではなく、新しいコメントとして新規に書いていただいた方がよろしいのではないかと思います。理由は、ここではユーザーが相互に書き込みでコミュニケーションをしています。ですから叩き台となる元の文章が変わってしまうと、後から読む方には意味が通じなくなってしまう恐れがあります。特にここは問題解決のデータベースとして長期間残されるものですので、できればそういうやりとりの痕跡も残しておいた方が便利かなと...。)


昨日は、結構これに助けられまして、何度もフォルダを作成することができました m(._.)m。よく使う機能なので Finder のフォルダウィンドウの上部のツールバーに登録させていただきました。


1度だけ、エラー番号のようなものが表示されてそのまま終了してしまいましたが、一瞬、原因がわかりませんでした。戸惑ったのはほんの数秒でしたが (^-^;)ゞ。念のため、作成するフォルダ名のリストのファイルを開いてみたら、案の定、保存した文字コードがうっかり UTF-8 ではなく UTF-16 になってしまっていました。


こういう時にエラーメッセージも日本語(ないし英語)で出るようになるとより便利かなと...。


で、なぜファイルの文字コードは UTF-8 でないといけないのでしょうか? 確か、Mac OS X の内部処理自体は UTF-16 で行われていますよね? ならば「ターミナル (Terminal) 2.1 (272) (20090706)」も UTF-16 に対応しているのではないかなどとも考えてしまうのですが...。あ、もしかすると、UTF-16 にしてしまうと、ASCII の部分がそのままでは読めなくなってしまうからかしら?


いずれにせよ、私は Jedit X Rev.2.20 (build 20203) (20100209) の新規書類保存時のデフォルト・エンコーディングは UTF-16 にしてあります。(改行コードは LF ですが、Mac OS X の標準改行コードってどれなんでしょうね?)日本語などを多用する場合には、確か UFF-16 の方が効率が良く、ファイルサイズも小さくなるんじゃありませんでしたっけ? その代わり、ASCII 文字はそのままでは読めなくなると...。


--------------------

Apple 17" MacBook Pro (Intel Core 2 Duo T7600/2.33 GHz/3 GB RAM/500 GB HDD)

Mac OS X 10.6.2 (Build 10C540) [Snow Leopard]

2010/02/14 15:15 しい坊 への返信

しい坊さん こんにちは


どのように答えたら良いものか随分悩みました...。で、結論なんですけど、お分かりにならないようでしたら上記ワンライナーを使わない方がよろしいかと思います。


代わりと言ってなんですけど、上のワンライナーをAppleScriptから実行するようにしたのが下記です。


注意点

・リストファイルのテキストエンコーディングはUTF8

・リストファイルの改行コードはLF

・リストファイル各項目に「/」が含まれないこと ※

・リストファイル各項目に「タブ」が含まれないこと ※

・リストファイル各項目の先頭が「.」ではないこと ※


※NG例:

ABC1111-山田/太郎

ABC1111-山田[タブ]太郎

.ABC1113-織田信長


この辺の問題をチェックするスクリプトはあった方が良いかもしれませんね...。


使い方

・下記をAppleScriptエディタにコピー&ペースト

・アプリケーション形式で保存

・ダブルクリックで起動

・ダイアログに従いファイルを選択

・ダイアログに従いフォルダ作成場所を選択


-- ここから

set msg1 to "リストファイルを選択してください。"

set myFile to POSIX path of (choose file with prompt msg1 without invisibles)


set msg2 to "フォルダを作成する場所を選択してください。"

set myDire to POSIX path of (choose folder with prompt msg2)


do shell script ("

cd " & quoted form of myDire & ";

perl -nle 'mkdir($_);' " & quoted form of myFile & "

")

-- ここまで


では。

2010/02/16 14:00 しい坊 への返信

こういう時にエラーメッセージも日本語(ないし英語)で出るようになるとより便利かなと...。

うーん…技術的には不可能ではないです。ただし、時間的に不可能(T_T)

最初に私が「軽くexception対策していますが」と書いていますが、

「自分にはメリットがないので、時給いくらくれますか(笑)」と言うくらい、

実は地味で膨大な作業だったりするので…。


そもそもエラーが発生すると、致命的でない場合はエラーコードを拾えますが、

そのエラーコードは何万とあります。そしてそのエラーは汎用的な意味です。

全エラーコードに対応した日本語エラーダイアログを表示するように造るのは

ナンセンスだし、本気で日本語でエラーメッセージを出すならば、

この「フォルダを造る」というスクリプトにとって、そのエラーが何を意味するか、

正しく解釈した日本語文章を事前に用意しなければなりません。


今回の場合とりあえずUTF-16を用意して、エラーコードを発生させると-1700ですね。

内部的には、この行で→「set s to read fileRefNo as «class utf8»」

readの結果が既に文字化けして、バックスラッシュがたくさんある

"意味不明な文字列"が生成されて、変数sに代入する際に「型変換のエラー」

が出ている様子だと解りました。-1700はデータ型が合わない意味なので。

つまり「文字コードがUTF-8ではありません」というエラーコードじゃない。

「型変換が出来ません」というエラーメッセージを出しても

結局ソースを解釈しないと意味不明ですよね。


デバッグに時間をかけられて、発生するであろうエラーが解っているときには、

日本語エラーダイアログを出すか、そもそもエラーが起きないように設計し直します。


何が言いたいかというと、日本語のエラーメッセージを事前に用意するのが

地味な作業がたくさん必要で難しい事がご理解戴けるのではないかと…(T_T)

2010/02/16 14:19 しい坊 への返信

それでは、対策を練りましょう。


さてこれは「あなたとわたしのちがい」ですね…(>_<)

私は新規書類保存時のデフォルト・エンコーディングは 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

-----------------------------

エディタ上のリストを元に複数のフォルダを自動で生成する方法は?

Apple サポートコミュニティへようこそ
Apple ユーザ同士でお使いの製品について助け合うフォーラムです。Apple Account を使ってご参加ください。