grep結果をファイルを出力No.16658
sk2910 さん 04/02/11 07:54
 
こんにちは、秀丸をビギナーです。
grepの正規表現を使ってマッチするところだけを他のファイルに
出力したいのですがどうしたらよいでしょうか?

例えば
神奈川県 横浜市 1234番地 〒250−134
とあったとします.
^(.+)県 .+ .+ 〒(.+) のようにして
¥1 ¥2 を県名と〒番号だけを他のファイル
に出力したいのですがどうしたらよいものでしょうか?
Perlなんかではやったことがありますが秀丸では
可能ですか?

[ ]
RE:16658 grep結果をファイルを出力No.16659
encodingshiftjis さん 04/02/11 09:32
 
エディタは入力・出力の2面は持っていないので
その場書き換えになります。手順の例として

元のテキストを開く、ファイル名を出力に変更
全置換

^.+?\f県 .+? .+? 〒\f.+

\0\t\2

保存終了

正規表現の書き方は
秀丸をインストールしたフォルダに、HMJRE.HLP
というファイルがあります。それがヘルプです。

Perl が使えるならそのほうが早いと思いますが?
(Perl5.8.2 でUNICODE も安定になったがまだ
Perl5.6ベースの人々が多い。)
秀丸のメリットは、処理の途中経過が見える点でしょうか
(Perlの開発環境ソフトを使う人はまれ、ですし)

[ ]
RE:16659 grep結果をファイルを出力No.16663
sk2910 さん 04/02/12 07:19
 
投稿、有難う御座います.
>エディタは入力・出力の2面は持っていないので
>その場書き換えになります。手順の例として
なるほど、その手がありましたね.
>元のテキストを開く、ファイル名を出力に変更
>全置換
>
>^.+?\f県 .+? .+? 〒\f.+
>↓
>\0\t\2

秀丸では\fを使って表現するのですね。勉強になります.
しかし、¥fだとどこからどこまでって指定できますか?
一、二回試したのですが一番初め(\0)しか表示してくれません.
多分もうちょっと勉強が必要ですね。

>Perl が使えるならそのほうが早いと思いますが?
そうですね。でも秀丸でも使えると便利ですよね.

>秀丸のメリットは、処理の途中経過が見える点でしょうか

なかなか面白いですね、秀丸にはまってきました。

[ ]
RE:16663 grep結果をファイルを出力No.16664
アルビレオ さん 04/02/12 08:08
 
秀丸ユーザーのアルビレオです。

>>^.+?\f県 .+? .+? 〒\f.+
>>↓
>>\0\t\2
>
>秀丸では\fを使って表現するのですね。勉強になります.
>しかし、¥fだとどこからどこまでって指定できますか?

たとえば「あいう」の中から「い」だけが欲しいなら
検索:あ\fい\fう
置換:\1
という具合に使わない番号は飛ばせばいいわけです。

>一、二回試したのですが一番初め(\0)しか表示してくれません.
>多分もうちょっと勉強が必要ですね。

encodingshiftjisさんのパターンをそのまま使ってこちらで試したところ、
「神奈川県 横浜市 1234番地 〒250−134」
ではうまくいきました。
実際に試した対象文字列と検索、置換のパターンをここに書けば、どこがおかし
いのかはわかると思います。
(検索文字列の「〒」の後の「\f」が正しく入っていないとか、置換文字列の最
後の「2」が抜けているとかのような気がします)

このパターンは
・「県」の直後に必ず全角空白がある
・「〒」の直前は必ず全角空白がある
・住所の途中に最低一つは全角空白がある
というルールに合わないものがあるとうまく動作しません。
私なら、「^.+?県\f.+〒\f.+」というパターンを使いますね。
これなら住所の文字列に「〒」という字が含まれることはないという前提さえ満
たせば、多少の表記の揺らぎには対応できます。(それに短い)

>>Perl が使えるならそのほうが早いと思いますが?
>そうですね。でも秀丸でも使えると便利ですよね.

元になるテキストはそのまま残しておいて一部を抽出したファイルを新たに作る
なら、Perlのようなフィルタ系のツールを使った方が圧倒的に便利だと思います。
Perlならこの程度はいちいち.plファイルを作らなくてもコマンドラインだけで
済みますから。
別に秀丸を使うべきではないということではありませんが。

[ ]
RE:16664 grep結果をファイルを出力No.16666
sk2910 さん 04/02/12 09:55
 
いつもお世話になります。

>私なら、「^.+?県\f.+〒\f.+」というパターンを使いますね。
これならスペース抜きでもOKということですよね。

^.+?県\f.+〒\f.+

検索

神奈川県横浜市1234番地〒250−134

置換

エラーメッセージ
"^.+?県\f.+〒\f.+ −見つかりませんでした"

正規表現のライブラリが違いますか?
私の方はJRE32.DLLです。



[ ]
RE:16666 grep結果をファイルを出力No.16667
sk2910 さん 04/02/12 09:56
 

>検索
>
>神奈川県横浜市1234番地〒250−134
>
>置換
>
^.+?県\f.+〒\f.+
の間違えです.

[ ]
RE:16666 grep結果をファイルを出力No.16668
tnobu2 さん 04/02/12 10:00
 
>エラーメッセージ
>"^.+?県\f.+〒\f.+ −見つかりませんでした"
>
>正規表現のライブラリが違いますか?
>私の方はJRE32.DLLです。

JRE32.DLLは"?"はサポートされていなかったと思います。

[ ]
RE:16666 grep結果をファイルを出力No.16669
アルビレオ さん 04/02/12 10:26
 
アルビレオです。

>正規表現のライブラリが違いますか?
>私の方はJRE32.DLLです。

JRE32.DLLは *? や +? といった最短一致が使えません。
HMJRE.DLLを使ってください。

どうしてもJRE32.DLLを使うなら
^[^県]+\f県.+〒\f.+
となります。


ところで、県だけでいいのでしょうか?
これを単純に都道府県に拡張すると北海道が「北海」になるし、もっと頭が痛い
ことに「京都府」の存在があるんですが。
(「都」にマッチしてしまい、置換後は「京」になってしまう)
それを考えると県名の後ろの空白は明示的な検索条件にしておいた方がいいかも
しれないですね。

例: ^.+(都|道|府|県)\f .+〒\f.+
(北海道対応のため、「神奈川」ではなく「神奈川県」になります)

[ ]
RE:16669 grep結果をファイルを出力No.16672
sk2910 さん 04/02/12 12:35
 
>アルビレオです。
>JRE32.DLLは *? や +? といった最短一致が使えません。
>HMJRE.DLLを使ってください。
そんなのもあるんですね.ぜんぜん知りませんでした.
早速どこからダウンロードして試してみます。

>ところで、県だけでいいのでしょうか?
>これを単純に都道府県に拡張すると北海道が「北海」になるし、もっと頭が痛い
>ことに「京都府」の存在があるんですが。
>(「都」にマッチしてしまい、置換後は「京」になってしまう)
>それを考えると県名の後ろの空白は明示的な検索条件にしておいた方がいいかも
>しれないですね。
>
>例: ^.+(都|道|府|県)\f .+〒\f.+
>(北海道対応のため、「神奈川」ではなく「神奈川県」になります)
丁寧に有難う御座います.これは正規表現を試すダミーデータに過ぎないのでなので
大丈夫です.

有難う御座いました.

[ ]
RE:16672 grep結果をファイルを出力No.16677
tnobu2 さん 04/02/12 13:50
 
>>JRE32.DLLは *? や +? といった最短一致が使えません。
>>HMJRE.DLLを使ってください。
>そんなのもあるんですね.ぜんぜん知りませんでした.
>早速どこからダウンロードして試してみます。

HMJRE.DLLは、秀丸v4.00以降のバージョンには添付されているはずです。
"http://hide.maruo.co.jp/software/hmjre.html"からも個別にダウンロード
できますが、v4.00以前の秀丸では使用できません。

DLLの切り替え方は、「設定」メニューの「環境設定」で、「環境」の
ところにある「DLLの変更」ボタンを押すと選ぶことができます。

[ ]