Skip navigation
Sakayama
Currently Being Moderated

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

Jun 23, 2009 7:24 PM

初めて投稿致します。

 

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

 

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

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

 

 

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

  • Currently Being Moderated
    Community Member
    Jun 24, 2009 6:35 PM

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

    |
    Mark as:
  • Currently Being Moderated
    Jun 28, 2009 8:36 PM

    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].charact ers[-1].index).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;

    |
    Mark as:
  • Currently Being Moderated
    Community Member
    Jun 29, 2009 7:15 PM

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

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

    |
    Mark as:

More Like This

  • Retrieving data ...

Bookmarked By (0)

Legend

  • Correct Answers - 10 points
  • Helpful Answers - 5 points