公開日:2017年12月21日
複数のファイルで表記を統一、しかもそれが2つ以上ある場合、何度も検索置換するのは非常に面倒です。いつのIllustratorからだったか、アクションは検索置換を記録できるようになっていますが、案件やファイルごとに検索置換パターンを設定したアクションを作るのも結構な労力です。
というわけで、「検索文字列-タブ-置換文字列」のようにタブで区切ったテキストを読み込んで、連続して検索置換をすることにしました。
//検索置換パターンを、読み込んだテキストから作成
var TAB = String.fromCharCode(9);
var fileObj = new File(File.openDialog("タブ区切りテキストファイルを指定してください"));
var flag = fileObj.open("r");
var findarr=[];
var chanarr=[];
if (flag)
{
while(!fileObj.eof)
{
var text = fileObj.readln();
var find = text.split(TAB)[0];
findarr.push(find);
var chan = text.split(TAB)[1];
chanarr.push(chan);
}
}
for(var Z=0;Z < findarr.length; Z++){//検索置換クエリを作成フォーー!!
var query = {fin:findarr[Z], chan:chanarr[Z]};
var txtFrm = [];
var doc = app.activeDocument;
for(var i=0; i < doc.pageItems.length; i++){//テキストオブジェクトを取得フォーーーー!!
itemType = doc.pageItems[i].typename;
switch(itemType){
case "TextFrame":
txtFrm.push(doc.pageItems[i]);
break;
default:
//テキストじゃない場合はスルー
break;
}//「じゃない」の条件式のif文を使ったほうが速いかもしれない
}
for(var r=0; r < txtFrm.length; r++){//検索置換フォーーーーーーーー!!
var reg = new RegExp(query.fin, 'gm');
txtFrm[r].contents = txtFrm[r].contents.replace(reg, query.chan);
}
}
//上書き保存まで(一括置換のあとは確認を)
doc.save();
//doc.close();
1.ドキュメントに対応したテキストを用意する。テキストファイル1行目から検索文字列-タブ-置換文字列の順で入力する。
2.対象のaiファイルを開いた状態でスクリプトを起動。テキストを選択するダイアログが表示される。
3.選択したテキストファイルの内容にもとづいて、連続で検索置換を行なう。処理が終わったあと、aiファイルは上書き保存される。
当初は「保存して閉じる」までやろうかと考えていましたが、どんなに細心の注意を払っても、一括置換は往々にして予期せぬところが変わっている場合があるもの。確認作業は目視も併用しよう、ということで「一括文字列置換~保存」までを一連の動作にしています。