このページは福井県立大学の田中求之が2006年1月まで運用していた Mac のサーバ運用に関する会議室 「Web Scripter's Meeting」の記録です。情報が古くなっている可能性がありますのでご注意ください。

Tanaka's OSAX 2.0のメモリ不足はどうすれば?

発言者:だいとう
( Date Tuesday, August 29, 2000 03:16:42 )


フォルダーに入っているファイルを一覧にして、ファイルに書き出したいと思い、
先生のOSAX2.0を使わせていただきました。
MT List Filesでサブフォルダーまでリストにして
MT Join Listで一つのファイル当たり1行として
MT Write Fileで書き出してます。

50個ぐらいのファイル数では、何の問題もないのですが、
本番では6000個近くあります。実行すると
メモリーが足りないというエラーが出て、編集ボタンをクリックすると
MT Join Listが反転されます。
スクリプトはアプリにしてメモリーを10MBぐらい割り当ててますが、同じです。
他に割り当てるメモリーサイズや、あるいは限界があるのでしょうか?

あと、MT List Filesで使ってはいけないファイル名の文字はありますでしょうか?

環境はOS8.6でOSAXはfc1を使っております。
質問ばかりで恐縮ですが、よろしくお願いいたします。

稲垣 さんからのコメント
( Tuesday, August 29, 2000 10:56:10 )

 確かAppleScriptのListの項目の限界で、項目数が数千になるとエラーを起こ
すはずです。
 もし、分割が可能であれば、分けて処理をすれば大丈夫だと思います。

 サブフォルダごとに書き出し処理を行えば大丈夫じゃないですか?

1.トップフォルダのファイル一覧を書き出す。
2.トップフォルダ内のフォルダをリストアップする。
3.2.でリストアップしたフォルダを一つずつサブフォルダまで調べて、
  追記する。


田中求之 さんからのコメント
( Tuesday, August 29, 2000 11:02:31 )

>メモリーが足りないというエラーが出て、編集ボタンをクリックすると
>MT Join Listが反転されます。

MT Join List を使うのを止めればよいと思います (^_^;;  リストを行に
変換するのであれば、AppleScript の text item delimiter を操作する
変換の方が早いはずです。

set oldDelims to AppleScript's text item delimiters
set AppleScript's text item delimiters to {return}
set myList to myList as string
set AppleScript's text item delimiters to oldDelims

で myList を行データに変換するという、定番を使うわけですね。

あるいは、もしメモリーの負担を小さくしたいということであれば、ファイル名の
書き出しを、ファイルごとに MT Write File の追記モード(with appending)
で行うという方法もあります。


>あと、MT List Filesで使ってはいけないファイル名の文字はありますでしょうか?

特にありません。特定の文字で問題を起こすようなことにはなっていません。
その代わり、単純にバイト単位で比較を行いますので、半角の \ で検索する
と、日本語の「表」がヒットすると行った、2バイト文字問題はあります。

だいとう さんからのコメント
( Thursday, August 31, 2000 21:52:22 )

ありがとうございます。
おっしゃる通りに変えてみますと、メモリー不足のエラーは出なくなりました。
2000個ぐらいを越えると、MT List Filesで
という項目はありません
みたいなメッセージ(?)が出ますが、
分割して実行すれば大丈夫です。