Skip navigation
Home/Support/

Forums

1562 Views 11 Replies Latest reply: May 21, 2008 12:04 PM by k-ooishi RSS
k-ooishi User 39 posts since
Jun 29, 2006
Currently Being Moderated

Apr 15, 2008 9:30 AM

FindGrepでカタカナの検索

Indesign CS3です。
FindGrepでUTF8のカタカナの検索をするとヒットしませんでした。
あれこれ試してみると、
app.findChangeGrepOptions.kanaSensitive = false;
とか
app.findChangeGrepOptions.widthSensitive = false;
とかの条件を付け加えると上手くいくようです。しかし、こういう書き方は適切なのでしょうか?
widthSensitive = false;は「全角と半角を区別しない」だからこれでもヒットするんですかね?
kanaSensitive = false;というのはどういう意味になるのでしょう?kanaSensitive = true;だとカタカナがヒットしない。falseだとヒットする。
ううむ意味不明…。
  • User 104 posts since
    Jul 23, 2005
    Currently Being Moderated
    2. May 17, 2008 7:02 PM (in response to k-ooishi)
    Re: FindGrepでカタカナの検索
    あのう、「なにか、勘違いをしてるのかなあ?」という言葉に引っかかったので書き込ませていただきます。
    なお、わたしはInDesignのFindGrep(正規表現検索)を使ったことがないので、あくまで「個人的な感想」です。てめえ、使ってもいない のに何言いやがるといわれれば、そのとおりです。最初に謝っておきます。

    ひとつ思ったのが、これはテキスト検索ではなくて、正規表現検索ですよね。すると「半角と全角を区別する、しない」などの設定は意味がないんじゃない でしょうか。つまり「A」という文字列を検索する場合、半角と全角を区別するなら「A」と、区別しないのなら「[AA]」で検索するのが正規表現検索 だと思うのですが。
    だとすると「半角と全角を区別する、しない」などの設定は必要ないということになりませんか? 何のためにその設定が生きているのか不明ですが、わたしは正規表現検索の場合にそれらの設定は不要だと思います。また、「バグではないか」と思われ る点についても、InDesignのプログラムの作成者がわたしと同じ考えなら、正規表現検索でその設定を行っても意味がないのは「仕様」です、と言 い切られるかもしれませんね。
  • User 104 posts since
    Jul 23, 2005
    Currently Being Moderated
    4. May 19, 2008 12:32 PM (in response to k-ooishi)
    Re: FindGrepでカタカナの検索
    調べてみると、テキスト検索と比較してGREP検索ではcaseSensitiveは削除されているのにkanaSensitiveとwidthSe nsitiveは削除されていません。正規表現検索ということであれば、このオプションも当然削除されてしかるべきです。それなのに残っているという のがそもそも不思議ですね。
    今改めてヘルプを見ました。すると
    「検索と置換ダイアログボックスの「GREP」タブでは、長いドキュメントや多数の開いているドキュメントで英数字文字列を検索する GREP 式を作成できます。」
    とあります。「英数字文字列」!
    これは一体何? どこまでが対象になっているの? 少なくとも2バイト文字はGREPの対象外?
    この先数日はInDesignでテストすることができないので確認ができませんが、InDesignの正規表現検索には何か罠がありそうです。
  • seuzo-oJiFme User 87 posts since
    Jan 12, 2002
    Currently Being Moderated
    6. May 20, 2008 12:17 PM (in response to k-ooishi)
    Re: FindGrepでカタカナの検索
    まあ、やりたいことがいまひとつ理解できないで、申し訳ないんですが。。。

    正規表現は「あいまい検索」と誤解されがちですが、本来とてもシビアで正確性を求められる検索だと思うんです。
    たとえば「A」というリテラルと検索すると、○付きや括弧付きなどの修飾字形や、ウムラウト付きの字形にもヒットします。
    これは「あいまい検索」な振る舞いであって、正規表現じゃなくなってしまう。
    そもそも、GREPなんて用語があいまいすぎる^^
    #GREPはedエディタの関数名、もしくはgrepユーティリティを指すと思う。なぜ「regex」でも「正規表現」でもなく「GREP」なの?
    この、全角半角を区別するオプションも、なんだかヘンな挙動をします。「全角」って何? 「半角」って何さ? みたいな気分なんです、わたし。
    お〜まちさんがおっしゃるように、本来こういう問題は文字クラスに担当させるべきだし、i18nに配慮したかったら、ロケールに依存しないPOSIX 文字クラスを援用すればいいのになあ、と。
    Adobeの中の人には、もうすこしグローバルな視点で開発なり、UI設計をしていただきたいと願っています。
  • seuzo-oJiFme User 87 posts since
    Jan 12, 2002
    Currently Being Moderated
    7. May 20, 2008 4:11 PM (in response to k-ooishi)
    Re: FindGrepでカタカナの検索
    あー、おっしゃっていることがようやくわかりました。理解が遅くてすいません^^
    「UTF8のカタカナ」ってなんだろう? と思っていたのです。

    スクリプトでなくても再現します。
    [ァ-ヾ]+
    と表現したとき、「カナを区別」「全角半角を区別」のオンオフに関係なく、ひらがなにもヒットします。
    こりゃまずい。
    おもしろい(?)のは
    [ア-ン]+
    を指定したときに、「カナを区別」がオンになっているとカタカナにはヒットせずにひらがなにヒットする。「カナを区別」がオフになっているとカタカナ ひらがなにヒットする。

    追試できた方は、不具合報告ページで報告してください。
  • seuzo-oJiFme User 87 posts since
    Jan 12, 2002
    Currently Being Moderated
    8. May 20, 2008 4:14 PM (in response to k-ooishi)
    Re: FindGrepでカタカナの検索
    で、回避方法も載せておきます。
    [¥x{30a1}-¥x{30fe}]+
    と書いてみてください。
    こうすると、「カナを区別」のオンオフ関係なく[ァ-ヾ]+ にヒットします。
    「カナを区別」をオフにしているのに、ひらがなを区別するのはどうなのか、という疑問は残りますけれど^^
  • seuzo-oJiFme User 87 posts since
    Jan 12, 2002
    Currently Being Moderated
    9. May 20, 2008 4:17 PM (in response to k-ooishi)
    Re: FindGrepでカタカナの検索
    ちなみに、JavaScriptからの操作でも同様の結果でした。
    テストに使用したスクリプトは以下の通りです。

    ////////////////////////////////////////////エラー処理
    function myerror(mess) {
    if (arguments.length > 0) { alert(mess); }
    exit();
    }

    ////////////////////////////////////////////正規表現検
    //正規表現で検索して、ヒットオブジェクトを返すだけ
    function my_regex(my_range_obj, my_find_str, my_change_str) {
    //検索の初期化
    app.findGrepPreferences = NothingEnum.nothing;
    app.changeGrepPreferences = NothingEnum.nothing;
    //検索オプション
    app.findChangeGrepOptions.includeLockedLayersForFind = false;//ロックされたレイヤーをふくめるかどうか
    app.findChangeGrepOptions.includeLockedStoriesForFind = false;//ロックされたストーリーを含めるかどうか
    app.findChangeGrepOptions.includeHiddenLayers = false;//非表示レイヤーを含めるかどうか
    app.findChangeGrepOptions.includeMasterPages = false;//マスターページを含めるかどうか
    app.findChangeGrepOptions.includeFootnotes = false;//脚注を含めるかどうか
    app.findChangeGrepOptions.kanaSensitive = true;//カナを区別するかどうか
    app.findChangeGrepOptions.widthSensitive = true;//全角半角を区別するかどうか

    app.findGrepPreferences.findWhat = my_find_str;//検索文字の設定
    //app.changeGrepPreferences.changeTo = my_change_str;//置換文字の設定
    return my_range_obj.findGrep();//検索の実行
    }

    ////////////////////////////////////////////字形の一括変換
    /*
    my_obj 字形を変更したいテキストオブジェクト
    my_gliph グリフフォーム(ex. AlternateGlyphForms.MONOSPACED_HALF_WIDTH_FORM;//半角字形
    */
    function all_glyph_change(my_obj, my_gliph) {
    for (var i = 0; i < my_obj.length; i++) {
    my_obj[i].glyphForm = my_gliph;
    }
    }

    /////実行
    ////////////////まずは選択しているもののチェック
    if (app.documents.length == 0) {myerror("ドキュメントが開かれていません")}
    var mydocument = app.activeDocument;

    ////////////////検索の実行
    var hit_obj = my_regex(mydocument, "[ア-ン]+", "");
    //var hit_obj = my_regex(mydocument, "[ァ-ヾ]+", "");
    mydocument.select (hit_obj[0]);
  • seuzo-oJiFme User 87 posts since
    Jan 12, 2002
    Currently Being Moderated
    10. May 20, 2008 4:44 PM (in response to k-ooishi)
    Re: FindGrepでカタカナの検索
    いわずもがなですが、スクリプト中に¥を書くときはエスケープしてください。
    "[¥¥x{30a1}-¥¥x{30fe}]+"

More Like This

  • Retrieving data ...

Bookmarked By (0)