初めて投稿致します。
InDesignのCS2を使用し、Paragraph 単位で文字の検索を行い、ヒットした所から1文字目までの削除を行います。
最初は、For 文を使用し、1 文字ずつの削除を行っていたのですが、処理量が多くなると作業時間もかなりかかってしまったので、
現状では、ヒットした箇所から1文字目までを For 文で回しながら、文字を Select し、アプリケーションのメソッドで Cut しています。
とても困っていますので、どなたか、ご教授お願いいたします。
追記致します。
CS3では、FindTextとFindGrepという関数が新設され、正規表現を使った検索が出来るようになりました。正規表現が使えると、この課題は一発で解決できま すね。CS2では正規表現の検索が出来ないと思います。機能不足をスクリプトの側で補うことになるので、効率の悪いことになるということでしょうか。
ここらへんの文字列の検索関係の関数はすくなくともCS2、CS3の間でかなり設計が変わっているようなので、あまり文字列検索の機能の弱いCS2にこだわるのも得策では ないように思います。(CS4でどうなってるのかは未確認ですが…)
CS2でどう効率的に記述するかという問題の直接の答えにはなっていません。すみません。
k-ooishi 様
ありがとうございます。
正規表現が使えるとなると、考え方も変わってきますね。
現在は、CS2を使用していますので、また何か良い方法がありましたら、
ご報告を宜しくお願い致します。
(行く行くは、CS3~CS4にしたいと思っています。)
Mac環境なのでVBでどう書くかは分からないのですが、JavaScriptならば以下のようにすればできると思います。
bykamo様
ありがとうございます。
記載頂いたJavaScriptでの処理は、完璧でした。
このJavaScriptを元に、vbの作成を行いました。
pindex = Hit_Texts(cnt_i).characters(1).index
pindex_2 = Hit_Texts(cnt_i).characters(-1).index
Hit_Texts(i).Parent.Characters.ItemByRange(pindex, pindex_2).Remove(pindex_2 - pindex)
プログラム上では、エラー無く動くのですが、検索該当文字が削除されないまま残ってしまいます。
vbの ItemByRange、Remove などを使用して、範囲文字の削除を行うことは可能でしょうか?
どうぞ、宜しくお願い致します。(vbに拘ってすみません。)
InDesign CS2スクリプトリファレンスを確認してみたのですが、JavaScriptのremove()メソッドはVBScriptだとDelete()(引数は無し)になるよ うです。
それから、検索してHitした文字列を消したいだけならば、.Parent.Characters.ItemByRangeの部分は不要で、単にHit_Texts(i) .Delete()でいいはずです。
bykamo様
ありがとうございます。
Hit_Texts(i) .Delete() でいろいろ出来そうです!
ご教授有難うございます。
Copyright © 2010 Adobe Systems Incorporated. All rights reserved.
Use of this website signifies your agreement to the Terms of Use and Online Privacy Policy (updated 07-14-2009).