19)検索置換

| コメント(14)

IllustratorCS3で選択されたtextFrameの文字を検索置換リストにしたがって検索置換します。このサンプルでは全角数字を半角にします。
スクリプトの最初のほうの

findrepAry.push("1,1");
findrepAry.push("2,2");

の部分を書き換えると、さまざまな検索置換に対応できます。

ただし、一度テキストを取ってきて検索置換してからテキストを戻すので細かい設定をしているテキストの場合は全ての文字が最初の1文字目の設定になってしまいます。ご注意下さい。

たぶん他のバーションのIllustratorでも動くと思います。

ダウンロードはこちら
findrep.zip

■■■使い方■■■
Illustratorドキュメントを開いた状態で
テキストを選択して実行してください。
ファイルメニューのスクリプトから実行してください。

Illustrator19

名古屋のDTP勉強会のあとデニーズで徹夜中にcheshire-Katzeさんとお話ししながら作成したスクリプトです。

var regStr = "/"+"1"+"/g";
var rep = "1";
var replaceStr = motoStr.replace (regStr, rep);

正規表現の上の書き方は出来ないのですが、

var regStr = "/"+"1"+"/g";
var rep = "1";
var replaceStr = motoStr.replace (eval(regStr), rep);

このようにevalを使うとうまくいきます。

Comments are nofollow setting

コメント(14)

むむぅ。たけうちさんて私のPCモニタリングしてるんじゃないかしら。て思うくらいにまたまたナイスタイミング。
例のエクセルグラフをAiに持っていくやつ、案の定半カナや全角英文のオンパレードだったんですよ。
ありがとうございまーす。

あれ。そうでしたか。
けっこうエクセルグラフはまだまだめんどうですね。
僕もいまエクセルの円グラフやってました。
罫線が塗りの四角になったりめんどうです。

あの時は素人の質問に気軽に付き合っていただいてありがとうございます。
その後、スクリプトまでメールで送っていただいて感謝感激です。
ただいま分からんなりいろいろいじってます。

>罫線が塗りの四角
それそれ!
私の事例では、点線がそうなってしまいます。
エクセル上であらかじめ点線をすべて実線にするしか回避方法がわかりません。

改定しました。
「(」を「(」に検索置換する場合エラーが出るとの事だったので
正規表現での検索置換だったのですが正規表現をやめて普通の検索置換に変更しました。

徐庶をはじめとして、たけうちさんのスクリプトには、いつもお世話になっております。

このスクリプトもマップを作る際の、文字列の校正に利用せてもらっておりますが、同じ文字列が複数ある場合、最初に出てきたものだけを変換したいのですが、どのように変更したらよいかアドバイスをいただけないでしょうか?

T.Fさん、こんにちは。

最初の文字列だけ変換するのはということで調べてみたのですが、このスクリプト最初の1つめだけ検索置換しますね。
0000だと0000になります。
全置換したい場合は下記正規表現版をお使いください。

//var replaceContents = replaceContents.replace (findrep[0], findrep[1]);
var replaceContents = replaceContents.replace (eval(regStr), findrep[1]);//正規表現の場合はこちらを使用。


と、ここまで書いて
> 同じ文字列が複数ある場合、最初に出てきたものだけを変換したい
の意味を取り違えているような気がしました。

例えば「0000」「0000」「0000」
と3つテキストフレームが合った場合一つ目を置換したいという意味でしょうか?

もしそうなら、ILLustratorで最初に出るというのを判別するのは難しいのですが、座標で一番左上とか計算すればできると思います。
ただかなり難しいですよ。手順としてはドキュメントの全てのテキストフレームを調べて、その中でも同じ文字列のテキストフレームをグループ分けして、それの座標を取り出し、一番左上にあるテキストフレームを調べ、そこだけを置き換えることになります。

たけうちさん ご連絡ありがとうございます。
説明が足りず申し訳ございませんでした。
「0000」「0000」「0000」と3つテキストフレームがあったた場合、とりあえず一つ目を置換したら、そこでストップして残りの2つのテキストフレームは置換せずに残したいということです。

マップ等をレイアウトしたときに、施設名などをチェックした後、誤って重複して配置したテキストフレームを、確認できたらと考えてのことです。

テキストフレームの座標取得の事ですが、すごく興味があります。
ネットで検索してみたのですが、geometricBounds、visibleBoundsを使う
方法でよいのでしょうか?

こんにちは。
このスクリプトで、正規表現で全置換したいのですが、
最初の文字しかできませんでした。
上記のコメントを見ながら色々ためした結果、

var replaceContents = replaceContents.replace (findrep[0], findrep[1]);
//var replaceContents = replaceContents.replace (eval(regStr), findrep[1]);//正規表現の場合はこちらを使用。

→この状態だと、正規表現を最初の文字は置換できるけど、全置換ができない。

//var replaceContents = replaceContents.replace (findrep[0], findrep[1]);
var replaceContents = replaceContents.replace (eval(regStr), findrep[1]);//正規表現の場合はこちらを使用。

→この状態だと、正規表現を置換できない。でも通常文字は全置換できる。


という感じになりました。
どこがつまずいているのでしょうか?

はじめまして。
一括置換のスクリプトを使用させていただいております。

完全一致で置換する場合、
どのようにすれば良いのかご教授願えないでしょうか。

mrさん

findrepAry.push("完全一致の文字,置換する文字");

でいけるのではないでしょうか?

お忙しいところ恐縮です。

『あいう』⇒『abc』
と置換したいときに
『あいうえ』が⇒『abcえ』
となってしまいます。

そこで正規表現で
『^あいう$』⇒『abc』
と設定するとそこは解決できました。

今度は『/』『[』などの文字を含むときに、
『\/』『\[』と設定してもエスケープできない状況になりました。

そういう状況もあり、
正規表現を使用せずに完全一致のみを置換したいと考えております。

追加補足:
テキストとテキストがグループ化されているときに、
テキスト置換が動作しないようです。
私はアクションにグループ解除を入れて動作させております。

追加補足でもう1点です。

これはあえての仕様であれば申し訳ないのですが、
イラストレーター上に改行があると、
テキストが一致しないようです。

すいません。忙しくてゆっくり検証できないので申し訳ないのですが

¥について言うと「¥」「\」の違いがありますので
普通に「¥」を入力した場合とoption+「¥」で「\」にした場合とお試しください。

あとスクリプトでは一旦変数に入れたものをeval(regStr)を使って正規表現と認識させているのですが、決まった文字なら

replaceContents.replace (eval(regStr), findrep[1]);
の部分を
replaceContents.replace (/^abc$/,"あいう");
のように試していただけますでしょうか?

コメントする

エントリー一覧

OpenID対応しています OpenIDについて
Powered by Movable Type 8.0.2
漢字イラストロジック-脳トレ京
FREE ONLINE SUDOKU