テキストファイルを開きその直後マクロ実No.03153
haru さん 02/05/22 13:22
 
 マクロから、テキストファイルを開き、このテキストファイル表
示直後、マクロを使ってメニューを表示させることは可能でしょう
か?
 同じく、マクロから、grepを実行し、grep結果表示直後、メニュー
を表示させることはどうでしょうか?
 よろしくお願いします。

[ ]
RE:03153 テキストファイルを開きその直後No.03154
たけのこ さん 02/05/22 13:35
 
たけのこです。

ご質問の先にある目的がよく分かりませんが、どちらも可能です。
マクロのヘルプで

openfile
grep
localgrep
menu
menuarray

場合によっては

execmacro

などを参照してみてください。

[ ]
RE:03154 テキストファイルを開きその直後No.03155
haru さん 02/05/22 17:01
 
たけのこさん、こんにちは。ありがとうございます。

>ご質問の先にある目的がよく分かりませんが、どちらも可能です。
1.ファイルを開くダイアログを表示し、あるファイルをその中か
    ら選んで開きます。
2.このファイルに対して、grepします。
3.次に、grep結果が表示されるんですが、行の先頭に表示される
    ファイル名、行番号等を削除します。

 以上のことをメニューに

1.ファイルを開く
2.grep
3.ファイル名、行番号等を削除

 と登録し、1が終了したら、メニュー表示、2が終了したらまた
メニュー表示としたいのですが。


>マクロのヘルプで
>openfile
>grep
>localgrep
>menu
>menuarray
>execmacro
>などを参照してみてください。
 一通り、読んでみましたが、検討が付きません。
 よろしくお願いします。

[ ]
RE:03155 テキストファイルを開きその直後No.03156
たけのこ さん 02/05/22 17:47
 
たけのこです。

>1.ファイルを開くダイアログを表示し、あるファイルをその中か
>    ら選んで開きます。
>2.このファイルに対して、grepします。
>3.次に、grep結果が表示されるんですが、行の先頭に表示される
>    ファイル名、行番号等を削除します。

> と登録し、1が終了したら、メニュー表示、2が終了したらまた
>メニュー表示としたいのですが。



こんな感じでしょうか?
//              ↓ここは適当に変えてください。
$grepkeyword = "grepするキーワード";

macrotop:
menu "ファイルを開く", "GREP", "ファイル名・行番号を削除";
#selected = result;
if(#selected == 0){
  endmacro;
}else if(#selected == 1){
  call fileopen;
}else if(#selected == 2){
  call greplocalwindow;
}else{
  call deletelinenum;
}
goto macrotop;


// ファイルを開く
fileopen:
OPEN;
return;


// GREP
greplocalwindow:
// 次の行のコメントをはずすと、いちいち検索キーワードをきいてきます
// $grepkeyword = input("検索キーワード", $grepkeyword);
localgrep $grepkeyword;
return;


// ファイル名・行番号を削除
deletelinenum:
replaceallfast ".*\\([0-9]+\\): ", "", regular;
return;

[ ]
RE:03156 テキストファイルを開きその直後No.03157
たけのこ さん 02/05/22 17:53
 
たけのこです。

>replaceallfast ".*\\([0-9]+\\): ", "", regular;

ここは

replaceallfast "^.*\\([0-9]+\\): ", "", regular;

とした方がベターでした。ちなみに、メニューでESCを押すと終了します。

[ ]
RE:03157 テキストファイルを開きその直後No.03158
encodingshiftjis さん 02/05/23 00:46
 
関連で、
秀丸ヘルプ/ 秀丸起動時のオプション

/xマクロ名
/gフラグ,検索するファイル,検索する文字列
/g
/dフォルダ名

が使えます。 .BAT と ショートカットで
定形処理とか、  マクロの run 文 で起動
できます。

[ ]
RE:03157 テキストファイルを開きその直後No.03159
きいろいまふらあ さん 02/05/23 01:03
 
横から失礼します。あげあしとりするつもりはないですが、

>replaceallfast "^.*\\([0-9]+\\): ", "", regular;

これだと、grepしてきた本文の中に「\([0-9]+\): 」にマッチする文字列がある
と、そこまで削除しちゃうことになります。念のため。

[ ]
RE:03159 テキストファイルを開きその直後No.03160
アルビレオ さん 02/05/23 04:21
 
>>replaceallfast "^.*\\([0-9]+\\): ", "", regular;
>
>これだと、grepしてきた本文の中に「\([0-9]+\): 」にマッチする文字列がある
>と、そこまで削除しちゃうことになります。念のため。

1.ファイル名にコロン`:'は使えない
2.秀丸のgrepはドライブをまたがった検索はできない(grepの結果にはドライブ名が
つかない)

ということで、
replaceallfast "^[^:]+\\([0-9]+\\): ", "", regular;
なら問題ないかと。

[ ]
RE:03160 テキストファイルを開きその直後No.03161
たけのこ さん 02/05/23 09:48
 
たけのこです。

>1.ファイル名にコロン`:'は使えない
>2.秀丸のgrepはドライブをまたがった検索はできない(grepの結果にはドライブ名が
>つかない)
>
>ということで、
>replaceallfast "^[^:]+\\([0-9]+\\): ", "", regular;
>なら問題ないかと。

ご指摘&修正サンクスです。正規表現が、基本的に欲張りなことをすっかり忘れ
てました。

[ ]
RE:03156 テキストファイルを開きその直後No.03162
haru さん 02/05/23 11:55
 
 皆さん、有益なアドバイスありがとうございます。
 hidemaruhandleを使ってやろうとしていたのが間違いでした。

 ところで、「ファイルを開く」処理に田楽サーバを使っているの
ですが、以下のようにして2回目を実行したら無限ループになって
しまいました。
 なので、openの前後に田楽初期処理と終了処理を入れました。そ
うしたら、うまく行きました。
 そういうものなんでしょうか?


田楽初期処理
>macrotop:
>menu "ファイルを開く", "GREP", "ファイル名・行番号を削除";
>#selected = result;
>if(#selected == 0){
>  endmacro;
>}else if(#selected == 1){
>  call fileopen;
>}else if(#selected == 2){
>  call greplocalwindow;
>}else{
>  call deletelinenum;
>}
>goto macrotop;
>
>
>// ファイルを開く
>fileopen:
田楽開く処理
>return;

[ ]
RE:03162 テキストファイルを開きその直後No.03163
たけのこ さん 02/05/23 13:00
 
たけのこです。

> ところで、「ファイルを開く」処理に田楽サーバを使っているの
>ですが、以下のようにして2回目を実行したら無限ループになって
>しまいました。

すみません、田楽関係は使ったことがないので、これはお力になれません。識者
にパス!

[ ]
RE:03163 テキストファイルを開きその直後No.03164
ENCODINGSHIFTJIS さん 02/05/23 15:24
 
推測ですが
田楽サーバー  は マクロ起動の 面と 接続が確立しています。
ファイルを開くと その面は、田楽サーバーと 未接続と
思います、
マクロは2回目のターンに入って、「田楽開く処理」に
なっていませんか。
秀丸マクロ実行は1本でも
動作している面(環境)がちがうでしょう。(たぶん)

[ ]
RE:03164 テキストファイルを開きその直後No.03165
杉浦 まさき さん 02/05/23 22:30
 
田楽鯖の作者の杉浦です。

>推測ですが
>田楽サーバー  は マクロ起動の 面と 接続が確立しています。
>ファイルを開くと その面は、田楽サーバーと 未接続と
>思います、

以下は秀丸マクロの仕様です。
1)マクロからは1つのDDEサーバとだけ接続可能
2)openfile 等で新規の秀丸ウィンドウを開く場合や、
  setactivehidemaru 等でマクロを実行するウィンドウを切り替えた場合
  DDE接続は自動的に切られてしまう(ので、切り替えの前後で


[ ]
RE:03165 テキストファイルを開きその直後No.03166
杉浦 まさき さん 02/05/23 22:41
 
すみません、途中で送られてしまいました(^^;。

2)openfile 等で新規の秀丸ウィンドウを開く場合や、
  setactivehidemaru 等でマクロを実行するウィンドウを切り替えた場合
  DDE接続は自動的に切られてしまう(ので、切り替えの前後で
  ddeterminate;  ddeinitiate を明示的に行う必要がある)

で、それぞれ以下のような感じで接続しなおせばOKです。

// ...
$comm_id = dderequest("keepalive 1"); // 再接続時に現在の状態を保持する
ddeterminate; // 一度DDE接続を切断する
#hwnd_org = hidemaruhandle(0);  // 現在のウィンドウのウィンドウハンドル
openfile $hoge_filename; // 新規秀丸ウィンドウを開く
ddeinitiate "DengakuServer", $comm_id; // 切断時の状態を復活
// ...
ddeterminate; // ウィンドウを切り替える際にも一度DDE接続を切断
setactivehidemaru #hwnd_org; // ウィンドウの切り替え
ddeinitiate "DengakuServer", $comm_id; // 再接続
// ...
ddeexecute "exit"; // サーバを終了
// ...


[ ]
RE:03161 テキストファイルを開きその直後No.03167
きいろいまふらあ さん 02/05/23 22:54
 
自分で解決策を提示せずにケチつけるばかりですみません。

>>2.秀丸のgrepはドライブをまたがった検索はできない(grepの結果にはドライブ名が
>>つかない)

念のため、grepには「ファイル名をフルパスで出力」っていうオプションがあり
ます。
これをONにすると「c:\hoge\moge.txt(123): …」みたいな出力になります
個人ユースレベルなら注意すればいいだけの話ですけど。

ん?じゃ、2行上の前提(注意すればいい)ならば "^[^:]+: " でいいのか?
#ほんとか???

[ ]
RE:03167 テキストファイルを開きその直後No.03168
たけのこ さん 02/05/24 08:56
 
たけのこです。

>念のため、grepには「ファイル名をフルパスで出力」っていうオプションがあり
>ます。
>これをONにすると「c:\hoge\moge.txt(123): …」みたいな出力になります

localgrepでは、そのオプションをONにしても、ドライブ名はつかないみたいで
す(無題ならファイル名さえつかない)。

[ ]
RE:03155 テキストファイルを開きその直後No.03169
ENCODINGSHIFTJIS さん 02/05/24 14:27
 
1.ファイルを開くダイアログを表示し、あるファイルをその
            中から選んで開きます。
2.このファイルに対して、grepします。
3.次に、grep結果が表示されるんですが、行の先頭に表示さ
            れるファイル名、行番号等を削除します。

---------- ヒットした行を取り出す、の意図なら

秀丸に組み込みの Grep に そう言うオプションが
無いので、マクロで後処理ではなくて。

Windows の FIND コマンドとか
Grep の オプションで 対応する のも ある。
run で コマンド実行して、出力を取り込む 案です。
=================================================
14:15 D:\temp> grep  -vV
GNU grep version 2.0 + multi-byte extension 1.04   //  Windows 移植版
usage: D:\SP\BIN\GREP.EXE [-[[AB] ]<num>] [-[CEFGVchilnqsvwx]] [-W ctype=...]
            [-[ef]] <expr> [<files...>]

14:15 D:\temp> grep  -h   j   *.txt
alkjflajflajsfl;jas;                   // データのみ

14:15 D:\temp> grep  -n   j   *.txt
j.txt:1:alkjflajflajsfl;jas;            // 秀丸タイプ

14:15 D:\temp> c:\windows\command\find  "j"   j.txt

---------- j.txt
alkjflajflajsfl;jas;

=================================================

[ ]
RE:03168 テキストファイルを開きその直後No.03170
きいろいまふらあ さん 02/05/25 01:46
 
>>念のため、grepには「ファイル名をフルパスで出力」っていうオプションがあり
>>ます。

>localgrepでは、そのオプションをONにしても、ドライブ名はつかないみたいで
>す(無題ならファイル名さえつかない)。

ごめんなさい。localgrep限定の話だったのですね。

[ ]
RE:03166 テキストファイルを開きその直後No.03171
haru さん 02/05/25 11:29
 
>で、それぞれ以下のような感じで接続しなおせばOKです。
 ありがとうございます。この方法でもやってみます。

[ ]