一字のみの英字にはヒットしない正規表現No.08832
石田 さん 18/11/19 20:10
 
先日、秀丸担当さんから教えてもらった英文の正規表現マクロはその後も安定動作し
ています。
(6メガ=文庫本約18冊分相当:置換個数13万個 4秒程度)
ただ、英語一字にもヒットするので修正を試みましたが、自分にはどうにも分からな
いでいます。
一字のみの英字にはヒットしないようにするには、どうしたら良いのでしょうか。
Win7 32ビット 秀丸Ver8.86
//英文自動処理マクロ
title "――― ●マクロ実行中";
selectall;
setcompatiblemode 0x20000;
replaceallfast "[a-zA-Z][a-zA-Z\\d\\.\\,\\s-]*" , "▲\\0▼" , regular , hili
ght;
   gofiletop;
endmacro;

[ ]
RE:08832 一字のみの英字にはヒットしないNo.08833
山紫水明 さん 18/11/19 20:39
 
 石田さん,

>一字のみの英字にはヒットしないようにするには、どうしたら良いのでしょうか。

検索語の最後にある「*」を「+」に変えてみたらいかがでしょう。
replaceallfast "[a-zA-Z][a-zA-Z\\d\\.\\,\\s-]+", "▲\\0▼", regular, hilight
;

なお,全文置換でしたら「selectall;」は不要でしょう。
その個所に「disabledraw;」を入れると高速化するかもしれません

                    山紫水明
                    SANSHISUIMEI

[ ]
RE:08833 一字のみの英字にはヒットしないNo.08834
石田 さん 18/11/19 22:04
 
山紫水明さん、初めまして。埼玉在住の石田と申します。

 以前は頻繁に秀丸公式でお名前を拝見していたのに、最近、あまり拝見しないので、
「山紫水明さんはもう秀丸から離れたのかな?」と心配してました。ご健在でなにより
でした。
>検索語の最後にある「*」を「+」に変えてみたらいかがでしょう。
確かに、その通りでした。素人が、マクロヘルプで後方不一致とかあれこれ見て試して
いたのですが。まさかの + 記号で済むとは…。
>その個所に「disabledraw;」を入れると高速化するかもしれません
上下に挟んで見たのですが、逆に遅くなってしまいました。
それと、置換箇所の hilight;が効かなくなるようです。
ともかく、山紫水明さんのご指摘で無事解決しました。感謝します。

//英文自動処理マクロ
title "――― ●マクロ実行中";
disabledraw;
//selectall;
setcompatiblemode 0x20000;
replaceallfast "[a-zA-Z][a-zA-Z\\d\\.\\,\\s-]+" , "▲\\0▼" , regular , hili
ght;
   gofiletop;
   enabledraw;
endmacro;
//replaceallfast "[a-zA-Z][a-zA-Z\\d\\.\\,\\s-]*" , "▲\\0▼" , regular , hi
light;

[ ]
RE:08834 一字のみの英字にはヒットしないNo.08835
山紫水明 さん 18/11/20 18:28
 
 石田さん,

>「山紫水明さんはもう秀丸から離れたのかな?」と心配してました。ご健在で
>なによりでした。
 ありがとうございます。なんとか生きながらえています。最近はマクロを作る
ことは少なくなりましたが,この会議室は覗いています。

>>その個所に「disabledraw;」を入れると高速化するかもしれません
>上下に挟んで見たのですが、逆に遅くなってしまいました。
 うーん,なぜでしょうね?

>それと、置換箇所の hilight;が効かなくなるようです。
 確かに disabledraw を使うと検索の強調表示が効かなくなります。これを避
けるにはマクロの最後の行に
hilightfound 1;
を追加すればいいようです。

                    山紫水明

[ ]
RE:08835 一字のみの英字にはヒットしないNo.08836
山紫水明 さん 18/11/21 20:14
 
 追伸です。
 大きいファイルを作って実験してみたら,確かに disabledraw をつけても速く
ならなくて,ほとんど変わりませんでした。
置換数 33,554,432  時間:32分ほど
ちなみに replceallquick では 24 秒でできました。

                    山紫水明

[ ]
RE:08836 一字のみの英字にはヒットしないNo.08838
石田 さん 18/11/21 22:38
 
自分もreplaceallfastから、replaceallquick に置き換えただけですが、
画面右下に「検索に時間がかかっています」と秀丸からのエラーメッセージがでます。
単純に置き換えるだけではダメなんでしょうか?
いまいちreplaceallquick 文の書き方が判っていません。


//英文自動処理マクロ
title "――― ●マクロ実行中";
setcompatiblemode 0x20000;
//replaceallfast "[a-zA-Z][a-zA-Z\\d\\.\\,\\s-]+" , "▲\\0▼" , regular , hi
light;
replaceallquick "[a-zA-Z][a-zA-Z\\d\\.\\,\\s-]+" , "▲\\0▼" , regular , hil
ight;
   gofiletop;
endmacro;


[ ]
RE:08838 一字のみの英字にはヒットしないNo.08839
秀丸担当 さん 18/11/22 08:48
 

たぶんですが、replaceallfastとreplaceallquickの違いの1つとして、改行の扱い
があります。
replaceallquickは全部をまとめて1つとして扱い、改行を含む正規表現ではそれも
対象になります。
マクロでは\sが改行も含むので、違いがありました。

もし改行を含む複数行の長い英文だと、そこそこ遅くなる可能性があります。

この例でもし改行を含まないようにしてもよければ、「\s」を、「 」と「\t」にし
て、以下のようにするといいと思います。

replaceallquick "[a-zA-Z][a-zA-Z\\d\\.\\, \\t-]+" , "▲\\0▼" , regular ,

[ ]
RE:08839 一字のみの英字にはヒットしないNo.08841
石田 さん 18/11/22 20:07
 
上記修正マクロで上手くいき、高速動作しました。(12メガ 38万行置換 2秒程度)
置換強調の
 hilight は効きませんが、組版ソフトの符号が緑色なので、修正箇所の識別は可能
です。
まだ始めたばかりですが、replaceallquick 文はファイル一枚を一括処理するために、
一本のマクロ文に
replaceallquick 〜regular ;
replaceallquick 〜regular ;
と二重に書いたり、
replaceallfast〜regular ;
replaceallquick 〜regular ;
と、混ぜて書くと、競合して上手くいかないのではないか? replaceallfast とは
違うと
勝手に想像しています。
※ 有り難うございました。感謝します。

//英文自動処理マクロ クイック全置換
title "――― ●マクロ実行中";
setcompatiblemode 0x20000;
replaceallquick "[a-zA-Z][a-zA-Z\\d\\.\\, \\t-]+" , "▲\\0▼" , regular ;
endmacro;

[ ]
RE:08835 一字のみの英字にはヒットしないNo.08842
石田 さん 18/11/22 20:28
 
山紫水明さん記

>これを避
>けるにはマクロの最後の行に
>hilightfound 1;
>を追加すればいいようです。

replaceallquick 文でも、hilightfound 1;は効くようです。
恥ずかしながら、初めて見る 文 でした。

//英文自動処理マクロ
title "――― ●マクロ実行中";
setcompatiblemode 0x20000;
replaceallquick "[a-zA-Z][a-zA-Z\\d\\.\\, \\t-]+" , "▲\\0▼" , regular ;
hilightfound 1;
endmacro;


[ ]
RE:08841 一字のみの英字にはヒットしないNo.08843
山紫水明 さん 18/11/22 21:48
 
 石田さん,

>一本のマクロ文に
>replaceallquick 〜regular ;
>replaceallquick 〜regular ;
>と二重に書いたり、
>replaceallfast〜regular ;
>replaceallquick 〜regular ;
>と、混ぜて書くと、競合して上手くいかないのではないか? replaceallfast
>とは違うと勝手に想像しています。

 こちらでは二重に書いたり,混ぜて書いても問題なく動いています。

                    山紫水明

[ ]
RE:08843 一字のみの英字にはヒットしないNo.08844
石田 さん 18/11/22 23:09
 
山紫水明さん記

> こちらでは二重に書いたり,混ぜて書いても問題なく動いています。

通常のマクロ文は上から下に実行されるものと理解していますが、
クイック全置換のように、一括処理する 文 は性格が異なる面倒な 文 だと思ってい
ました。
以下を試したら、そのまま動作しました。

replaceallfast "^[  \\t]+$" , "" , regular;
replaceallquick "[a-zA-Z][a-zA-Z\\d\\.\\, \\t-]+" , "▲\\0▼" , regular ;

[ ]
RE:08844 一字のみの英字にはヒットしないNo.08845
石田 さん 18/11/24 22:35
 
上記マクロ文を手直しして、和文と英文の間に半角スペースを入れ、着色表示する稚拙
過ぎるマクロを作ってみました。英字一字にはヒットしません。
//英文−和文半角挿入
replaceallquick "^[  \\t]+$" , "" , regular;
replaceallquick "[a-zA-Z][a-zA-Z\\d\\.\\, \\t-]+" , " \\0 " , regular ;
hilightfound 1;
endmacro;
例  文
qあwあeあrあtあyあuあiあoあpあaあsあ
qあwあeあrあtあyあuあiあoあxあcあvあbあnあmあ
1234567890
1234567890
日本語Twenty-First Century Fox, Inc.日本語 (21世紀フォックス社 英文社名)
秀丸Editorは日本の老舗Editorです。
秀丸ファイラclassicはfiler softです。
(マクロ実行結果)
qあwあeあrあtあyあuあiあoあpあaあsあ
qあwあeあrあtあyあuあiあoあxあcあvあbあnあmあ
1234567890
1234567890
日本語 Twenty-First Century Fox, Inc. 日本語 (21世紀フォックス社 英文社名)
秀丸 Editor は日本の老舗 Editor です。
秀丸ファイラ classic は filer soft です。

[ ]
RE:08845 一字のみの英字にはヒットしないNo.08846
石田 さん 18/11/24 23:55
 
replaceallquick 文は本当に早い印象を受けます。
少し悪乗りして、26メガ(文庫本約78冊相当)=80ケタ折り返し65.5万行の
ファイルを作って上記マクロを実行しました。置換総数100万個。
実行時間は7秒程度でした。replaceallfastだと、30秒程度でした。

※ 英字の左側と和文の間に半角スペースは入るけど、強調表示されないのは
ナゾですが、結果オーライと言うことで…。

[ ]
RE:08846 一字のみの英字にはヒットしないNo.08847
山紫水明 さん 18/11/25 16:52
 
 石田さん,

>※ 英字の左側と和文の間に半角スペースは入るけど、強調表示されないのは
>ナゾですが、

 これは元の検索語の先頭に半角スペースがないからで,強調表示の行の前に
setsearch " " + searchbuffer, searchoption;
の1行を挿入して,検索語を再定義してみたらいかがでしょう。

                    山紫水明

[ ]
RE:08847 一字のみの英字にはヒットしないNo.08849
石田 さん 18/11/26 19:10
 
> これは元の検索語の先頭に半角スペースがないからで,強調表示の行の前に
>setsearch " " + searchbuffer, searchoption;
>の1行を挿入して,検索語を再定義してみたらいかがでしょう。


こんな感じでしょうか? これなら組版ソフトとは関係ない普段日本語テキストに英
文を
混ぜて書く機会の多い人に使えるかも? 一々、IMEオフで、手入力で半角スペースを
入れる必要がないので、手間が省けるかも知れません。英字一字や、数字にはヒット
しない
ため便利だと思います。(タイプする時は英字・和文間に半角スペースを入れないの
が条件です。
入れると、マクロ実行時に半角スペースが二つになります。)
※ 山紫水明さん 有り難うございます。
※ searchoption ヘルプを読みましたが、これ以上のパラメータは必要ないと思いま
す。
※ それにしても自分の知らない 文 ばかり出てきますね。

//英文−和文 半角挿入マクロ
setcompatiblemode 0x20000;
replaceallquick "^[  \\t]+$" , "" , regular;
replaceallquick "[a-zA-Z][a-zA-Z\\d\\.\\, \\t-]+" , " \\0 " , regular ;
setsearch " " + searchbuffer, searchoption;
hilightfound 1;
endmacro;


[ ]
RE:08849 一字のみの英字にはヒットしないNo.08851
山紫水明 さん 18/11/26 20:58
 
 石田さん,

>(タイプする時は英字・和文間に半角スペースを入れないのが条件です。入れる
>と、マクロ実行時に半角スペースが二つになります。)

 万一,手拍子で半角スペースを入れてしまっても,半角スペース2個を1個に
置換する1行を入れておけば問題ないかもしれません。

                    山紫水明

[ ]
RE:08851 一字のみの英字にはヒットしないNo.08852
石田 さん 18/11/26 21:43
 
英文文字列にある半角スペースには影響を与えず、英文と接する和文との
間にある半角スペースのみ消去する訳ですので、だいぶ手強いです。



[ ]
RE:08852 一字のみの英字にはヒットしないNo.08853
山紫水明 さん 18/11/26 22:23
 
 石田さん,

>英文文字列にある半角スペースには影響を与えず、英文と接する和文との
>間にある半角スペースのみ消去する訳ですので、だいぶ手強いです。

 いや,私の意図は以下の通りです。もともと英文文字列の中にに連続する二つ
の半角スペースがあって,それを消去するのが具合悪ければ話は別ですが。

//英文−和文 半角挿入マクロ
setcompatiblemode 0x20000;
replaceallquick "^[  \\t]+$" , "" , regular;
replaceallquick "[a-zA-Z][a-zA-Z\\d\\.\\, \\t-]+" , " \\0 " , regular;
replaceallquick "  ", " ";
setsearch " " + searchbuffer, searchoption;
hilightfound 1;
endmacro;
>

                    山紫水明
                    SANSHISUIMEI

[ ]
RE:08853 一字のみの英字にはヒットしないNo.08855
石田 さん 18/11/27 21:17
 
山紫水明さん記

> いや,私の意図は以下の通りです。もともと英文文字列の中にに連続する二つ
>の半角スペースがあって,それを消去するのが具合悪ければ話は別ですが。

昨晩書き込みした後、和文の正規表現 [亜-熙ぁ-んァ-ヶ] を使って、
あれこれ考えていましたが、良い知恵は出てきませんでした。
上記の山紫水明さんのマクロで望み通りになりました。和英間にスペースがあっても
これなら半角スペースが二つになることは有りませんね。

※ 上記和文の正規表現では「、」「ー」「。」「」『』等はヒットしないようで、
  手元にあるフォントの区点コード表をみたら、すべて「記号・英数字」に収録
  されていました。(初めて知りました)
・佐々木の「々」・いすゞ自動車の「ゞ」・〆切り近しの「〆」
  すら漢字区分に収録されていないのは不自然な印象を受けます。


[ ]