Home/Support/

Forums

This Question is Answered

7 Replies Last post: Jun 29, 2009 7:49 PM by Sakayama  
Sakayama User 6 posts since
Jun 23, 2009
Currently Being Moderated

Jun 23, 2009 7:24 PM

文章途中文字の削除を行うには cs2 vb2005

初めて投稿致します。

 

InDesignのCS2を使用し、Paragraph 単位で文字の検索を行い、ヒットした所から1文字目までの削除を行います。

 

最初は、For 文を使用し、1 文字ずつの削除を行っていたのですが、処理量が多くなると作業時間もかなりかかってしまったので、

現状では、ヒットした箇所から1文字目までを For 文で回しながら、文字を Select し、アプリケーションのメソッドで Cut しています。

 

 

とても困っていますので、どなたか、ご教授お願いいたします。

k-ooishi User 39 posts since
Jun 29, 2006
Currently Being Moderated
2. Jun 24, 2009 6:35 PM in response to: Sakayama
Re: 文章途中文字の削除を行うには cs2 vb2005

CS3では、FindTextとFindGrepという関数が新設され、正規表現を使った検索が出来るようになりました。正規表現が使えると、この課題は一発で解決できま すね。CS2では正規表現の検索が出来ないと思います。機能不足をスクリプトの側で補うことになるので、効率の悪いことになるということでしょうか。
ここらへんの文字列の検索関係の関数はすくなくともCS2、CS3の間でかなり設計が変わっているようなので、あまり文字列検索の機能の弱いCS2にこだわるのも得策では ないように思います。(CS4でどうなってるのかは未確認ですが…)
CS2でどう効率的に記述するかという問題の直接の答えにはなっていません。すみません。

bykamo User 3 posts since
Jun 28, 2009
Currently Being Moderated
4. Jun 28, 2009 8:36 PM in response to: Sakayama
Re: 文章途中文字の削除を行うには cs2 vb2005

Mac環境なのでVBでどう書くかは分からないのですが、JavaScriptならば以下のようにすればできると思います。

 

//検索置換設定の退避
var findPreferencesOld = app.findPreferences.properties;
var changePreferencesOld = app.changePreferences.properties;
app.findPreferences = 1851876449; //NothingEnum.nothing;
app.changePreferences = 1851876449; //NothingEnum.nothing;
var range = app.selection[0].parentStory; //検索範囲は文字キャレットのある親ストーリー
app.findPreferences.findText = "●●"; //検索文字列
var Hit_Texts = range.search(); //検索実行
for (var i = Hit_Texts.length-1; i>= 0; i--){
try {
var pindex = Hit_Texts[i].paragraphs[0].characters[0].index;//パラグラフの先頭文字のindex
Hit_Texts[i].parent.characters.itemByRange(pindex,Hit_Texts[i].characters[-1].in dex).remove();//文字列の削除
} catch(e) {}
}
//検索置換設定の復帰
app.findPreferences.properties = findPreferencesOld;
app.changePreferences.properties = changePreferencesOld;
if (app.findPreferences.kerningMethod=="None") app.findPreferences.kerningMethod = 1851876449;
if (app.changePreferences.kerningMethod=="None") app.changePreferences.kerningMethod = 1851876449;

bykamo User 3 posts since
Jun 28, 2009
Currently Being Moderated
6. Jun 29, 2009 7:15 PM in response to: Sakayama
Re: 文章途中文字の削除を行うには cs2 vb2005

InDesign CS2スクリプトリファレンスを確認してみたのですが、JavaScriptのremove()メソッドはVBScriptだとDelete()(引数は無し)になるよ うです。

それから、検索してHitした文字列を消したいだけならば、.Parent.Characters.ItemByRangeの部分は不要で、単にHit_Texts(i) .Delete()でいいはずです。

More Like This

  • Retrieving data ...