検索と置換の不具合?

[7064]検索と置換の不具合? | 投稿者:urodema | 投稿日:2012/09/06(Thu) 14:56:28
お世話になっております,urodemaともうします.

Windows XP,InDesign CS4 (6.0.6) を使用しております.

検索と置換について質問させて頂きます.

化学式にて,ブラケットで全体を囲んでいる場合はブラケットをトルという要望がお客様から来ました.
例:[Hf(BH<sub>4</sub>)<sub>4</sub>]
→ Hf(BH<sub>4</sub>)<sub>4</sub> としたい.
 注)<sub>?</sub>は下付きを適用しています.

なので,検索条件は "^[\[[]([^\[[]+)[\]]]$" とし,置換式を "$1" としました.
しかし,いざ置換してみると,文字スタイルの適用されている部分がズレて置換されてしまいます.

実際に置換されるもの
→ Hf(BH4<sub>)</sub>4 となってしまいます.

ちなみに,置換式を "$1ab" とした場合は,"Hf(BH4<sub>)</sub>4<sub>a</sub>b" となりました.

今回は数が少ないので検索したものを手で直していますが,
数が多い場合など皆様どういうふうにしていますか?
あと,CS5以降でも同じ現象が起きるのでしょうか?

以上,よろしくお願いします.
» 1
[7066]Re: 検索と置換の不具合? | 投稿者:(z-) | 投稿日:2012/09/06(Thu) 16:39:33
こんにちはー
残念ながらスタイルのズレは検索置換機能の仕様となります。
最近のバージョンは触ってないのでわかりませんがorz
直ったという声は聞いておりません。。

最初の検索条件から察して化学式だけで完結する単独の段落という解釈の上で、
ス...スクリプトで回避はできます。
簡便なテストしかしていませんが、任意のテキストフレームを1つ選択して実行してみてください。連結フレームの場合そのストーリー全体が対象となります。

var paraAry=app.selection[0].parentStory.paragraphs;
var firstStyle, lastStyle, myCount=0;
for(var i=0; i<paraAry.length; i++){
firstStyle=paraAry[i].textStyleRanges[0];
lastStyle=paraAry[i].textStyleRanges[-1];
if(firstStyle.contents.match(/^[\[[]/) && lastStyle.contents.match(/[\]]][\n\r]?$/) ) {
firstStyle.contents=firstStyle.contents.replace(/^[\[[]/, "");
lastStyle.contents=lastStyle.contents.replace(/[\]]][\n\r]?$/, "");
myCount++;
}
}
alert(myCount+"箇所を置換しました");

先頭文字スタイル、正規表現スタイルなどは今回無縁でしょうか?
» 2
[7067]Re: 検索と置換の不具合? | 投稿者:(z-) | 投稿日:2012/09/06(Thu) 16:42:12
すみません。。改段コードもろともぶっとびました(土下座)
以下に改めます。すみませんorz

var paraAry=app.selection[0].parentStory.paragraphs;
var firstStyle, lastStyle, myCount=0;
for(var i=0; i<paraAry.length; i++){
firstStyle=paraAry[i].textStyleRanges[0];
lastStyle=paraAry[i].textStyleRanges[-1];
if(firstStyle.contents.match(/^[\[[]/) && lastStyle.contents.match(/[\]]][\n\r]?$/) ) {
firstStyle.contents=firstStyle.contents.replace(/^[\[[]/, "");
lastStyle.contents=lastStyle.contents.replace(/[\]]]([\n\r]?)$/, "$1");
myCount++;
}
}
alert(myCount+"箇所を置換しました");
» 3
[7069]Re: 検索と置換の不具合? | 投稿者:urodema | 投稿日:2012/09/06(Thu) 19:08:58
(z-)様
お早いご返答ありがとうございました.

やはりそういう仕様なんですね.
スクリプトまで作らなければならないとは....

質問があります.
1.今回,約物を半角にするために正規表現スタイルを使用していますが,何か影響があるのでしょうか?
2.私の環境では最後の行しか処理されませんでした."([\n\r]?)$"の部分を"([\n\r])"としたら問題なく動きましたが,MacとWindowsで段落の末尾など違うのでしょうか?

あとは,ブラケットが2つ以上ある場合は無視したいなどありますが,それはこちらでこのスクリプトを元に修正させて頂きます.
おそらく,ループがひどいことになりそうですが...

ありがとうございました.
» 4
[7072]Re: 検索と置換の不具合? | 投稿者:(z-) | 投稿日:2012/09/07(Fri) 12:12:49
多少なりお役に立てたなら何よりです^

えーご質問の件
1.該当文字に特定の文字が隣り合ってる場合に処理している場合、などはブラケットの削除で何かが起こるかと、そういう意味合いでした
2.すいませんテストが安直すぎたようで、単純にウチの書式ミスですorz
» 5
[7073]Re: 検索と置換の不具合? | 投稿者:urodema | 投稿日:2012/09/07(Fri) 14:36:32
ご返信ありがとうございます.

申し訳ありませんが,私の読解力が足りず,おそらくこうだろうなという憶測を含みますが,答えさせていただきます.
「該当文字に特定の文字が隣り合ってる場合」というのは,例えば「(」と「~」のような別々の文字がそれぞれ別の正規表現スタイルで適用され,かつその2つが隣り合っている場合,でしょうか?
今回の場合は文字でスタイルを適用させているため,正規表現置換やスクリプトによる置換では影響はありませんでした.
私はDTPオペレータではないので詳しいことはわかりませんが,文字以外で正規表現スタイルを適用させる場合などは(あるかどうかも)わかりません.
この記事の書き込み元へのリンク (コメントや質問などはこちらへどうぞ)