フォルダ内のファイル一覧を表示する (Illustrator CS2/CS3編)

この連載で過去に一度しかやっていないネタがあります。それが今回の「フォルダ内のファイル一覧を表示する」というものです。非常に簡単そうに見えますが、Windows版なら確かにそうです。しかし、MacOS XとIllustrator CS2/CS3の場合、簡単にはいきません。 というのもMacOS X上で動作するAdobe系のソフトはファイル名に濁点(がぎぐげご)や半濁点(ぱぴぷぺぽ)が含まれると正しく処理および表示されないためです。
MacOS Xのバージョンによって違うかもしれませんが、MacOS X Tiger (10.4) + Illustrator CS2では濁点などは分離して処理されてしまいます。MacOS X Leopard (10.5) + Illustrator CS3では濁点などは文字化けして(四角にバツ)表示されてしまいます。
これはInDesign CS2でも発生していた症状です。この不具合があるため、手軽にファイル一覧を取得して処理したいということができなかったわけです。

この処理を行なわない(Windowsであれば)場合には以下のスクリプトで簡単にIllustrator上にファイル一覧を表示することができます。

CR = String.fromCharCode(13);
docObj = app.activeDocument;
foldername = Folder.selectDialog("フォルダを指定してください");
if (foldername)
{
fileList = foldername.getFiles();
result = "";
for (i=0; i<fileList.length; i++)
{
result += File.decode(fileList[i].name) + CR;
}
textObj = docObj.textFrames.add();
textObj.contents = result;
textObj.translate(0,700);
}

しかし、これではMacOS X Tiger/Leopardでは濁点が正しく処理されないので以下のように特別な処理を行なってファイル一覧を表示します。

dakuten = "%E3%82%99";
handakuten = "%E3%82%9A";
CR = String.fromCharCode(13);
docObj = app.activeDocument;
foldername = Folder.selectDialog("フォルダを指定してください");
if (foldername)
{
fileList = foldername.getFiles();
result = "";
for (i=0; i<fileList.length; i++)
{
filename = fileList[i].name;
filename = convertKana(filename,dakuten,1);
filename = convertKana(filename,handakuten,2);
result += File.decode(filename) + CR;
}
textObj = docObj.textFrames.add();
textObj.contents = result;
textObj.translate(0,700);
}
function convertKana(srcName, code, count)
{
srcName = srcName.replace(/%E3%82%BF%E3%82%99/g, "%E3%83%80"); // ダだけ特殊処理
var text = srcName.split(code); // 濁点
for (var i=0; i<text.length-1; i++)
{
var str = text[i];
if (str == "") continue;
var body = str.substring(0,str.length-2);
var footL = str.substring(str.length-2, str.length);
var hexL = eval("0x"+footL) + count;
hexL = hexL.toString(16).toUpperCase();
text[i] = body+hexL;
}
return text.join("");
}

テーブルで対応する文字を置換するという方法は残念ながら使えません。というのも内部で比較する際には「た”」も「だ」も同じとみなされてしまうためです。
結局、仕方ないので内部コード(ユニコード)を操作して最後にFile.decode()で日本語に復元するという処理を行なっています。幸い「ダ」以外は+1または+2の加算で処理できるためです。

[サンプルをダウンロード]