[ 新規に投稿する ]

ファイルのなかにある文字列でマクロの動き変えることを簡単に実現No.42389
(-L-) さん 25/12/21 10:13 [ コメントを投稿する ]
個別ブラウザに表示しているファイル(編集中のファイルとは異なるファイル名=仮にhogehoge.html)

このhogehoge.htmlの中に、
 ・foobarという文字列がある
 ・foobarという文字列がない
で動作を変えるマクロを組みたいのです。

grepコマンドでhogehoge.htmlの中を探索できるようなのですが、grepの結果リストや、ダイアログが邪魔です。

例えば

grep "foobar", "hogehoge.html", ".", result;
 if (result > 0) {
 (ここにfoobarがあったときの処理)
 }

みたいな感じで、grepやlocalgrepコマンドの結果はresultにしか格納されないということで、簡単にifで判断できるようにはなりませんでしょうか。
(そもそもgrepコマンドをつかうのがおかしいのかもしれませんが、適切なコマンドを見つけることができませんでした。)
[ ]
RE:42389 ファイルのなかにある文字列でマクロの動き変えることをNo.42390
h-tom さん 25/12/21 16:22 [ コメントを投稿する ]
  h-tom です。

>(そもそもgrepコマンドをつかうのがおかしいのかもしれませんが、適切なコマンドを見つけることができませんでした。)
非表示でファイル開いて検索するか、JavaScript使ってファイル内容取り込んで検索すればいいのでは?
[ ]
RE:42390 ファイルのなかにある文字列でマクロの動き変えることをNo.42391
(-L-) さん 25/12/21 17:42 [ コメントを投稿する ]
>非表示でファイル開いて検索するか、JavaScript使ってファイル内容取り込んで検索すればいいのでは?

コメントありがとうございます。
このようなコメントであるということは、grepにかわるコマンドは特に存在しないということで承知しました。

簡単なマクロで実現が希望です。

その非表示でファイル開いて検索や、JavaScript使ってファイル内容取り込んで検索のコードは簡単なものでしょうか。
であれば例としてのマクロを示していただけると幸いです。
(提示が面倒な感じであるのならば、簡単な実装ではないと思いますので求めませんし、私はそこまでしないで素直に諦めることにします。)

ということで、簡単なマクロで実現できると良いなと思っています。
ちょうどマクロにgrep機能が実装されていたので、この延長で簡単な方法で実現できないのかなぁという感じです。
[ ]
RE:42391 ファイルのなかにある文字列でマクロの動き変えることNo.42392
秀丸担当 さん 25/12/22 09:15 [ コメントを投稿する ]
  従来マクロだと面倒なところがありますが、JavaScriptの場合は以下のようににして簡単にする方法があります。

js{
  var a = hidemaru.loadTextFile("c:\\folder\\hogehoge.html");
  if( a && a.indexOf("foobar" )>=0 ){
    //message("ここにfoobarがあったときの処理");
  }
}
endmacro;
[ ]
RE:42392 ファイルのなかにある文字列でマクロの動き変えることNo.42393
(-L-) さん 25/12/22 09:55 [ コメントを投稿する ]
>従来マクロだと面倒なところがありますが、JavaScriptの場合は以下のようににして簡単にする方法があります。

案で出したgrep+result_onlyなら従来マクロでも面倒じゃないところかと思いますが、いただいたjavascriptなら簡単レベル(これならやってみようレベル)で実現できるということで承知しました。

ご参考までに
今回の件で、マクロのgrepにたどり着くまでにやりたいことを検索していたのですが、

 COMオブジェクトの呼び出しサンプル
 FileSystemObjectを使ったファイルの読込み

あたりにたどり着くため、これは無理レベルだな。
ということで要望を出させていただいたという経緯がございます。
[ ]
RE:42393 ファイルのなかにある文字列でマクロの動き変えることNo.42408
igus さん 25/12/24 04:39 [ コメントを投稿する ]
  grep "foobar", "hogehoge.html", ".", result;
#r=result;
#hwnd=hidemaruhandle(0);
setactivehidemaru 1;
closehidemaruforced #hwnd;
if(#r>0){message "foobarみっけ";}
[ ]
RE:42408 ファイルのなかにある文字列でマクロの動き変えることNo.42409
(-L-) さん 25/12/24 07:08 [ コメントを投稿する ]
>grep "foobar", "hogehoge.html", ".", result;
> ......
>if(#r>0){message "foobarみっけ";}

grepの引数に resultが残っているのをみかけたので、動作確認はされてないものと推測しました。(秀丸マクロを組むのに、その領域になっていれば楽なんですが。羨ましい。)

・grepの結果の秀丸編集画面を強制クローズすればいいじゃん。
・そしてresultの結果だけを拾って処理を進めればいいじゃん。

というコードと理解しました。

設定によるのかもしれませんが、私の環境だと、grepのダイアログも出てきます。(終了しても閉じない設定としているからかも。)
ということで、ダイアログが出てるなら閉じる処理もしないとという感じで肥大化して面倒くさいなぁ。という印象でした。

javascriptなら、そういうこともなくサクッと実現できるということも分かりました。(手元はこれで実現)

とはいえ、提示くださり、ありがとうございました。
[ ]
RE:42409 ファイルのなかにある文字列でマクロの動き変えることNo.42410
igus さん 25/12/24 09:02 [ コメントを投稿する ]
  スクリプトの意図はその通りです。(-L-)さんの提示されたサンプルをそのまま使っているのはおっしゃる通りでgrepの引数に resultが残っているのはアップしてからおかしいなと思いましたが「動作確認はされてないものと推測しました」というのは全身全霊を捧げて否定させていただきます。うちの秀丸だとこれでちゃんと通ったからレスしました。引き出しは多い方がいいと思ったのですがあまり参考にならなかったようで残念です。
[ ]
(発言者削除)No.42411
(-L-) さん 25/12/24 09:55
 
[ ]
RE:42410 ファイルのなかにある文字列でマクロの動き変えることNo.42412
(-L-) さん 25/12/24 09:57 [ コメントを投稿する ]
>「動作確認はされてないものと推測しました」というのは全身全霊を捧げて否定させていただきます。

result が残っていたことから、秀丸エディタのマクロがエラーを返すものと私自身の判断で推測し、そのような発言をしてしまいました。
配慮に欠ける発言となりましたことを、心よりお詫び申し上げます。

>うちの秀丸だとこれでちゃんと通ったからレスしました。

resultの件といい、環境によっては問題なく動いてしまったりなど、この緩さが秀丸マクロの設計思想かと思いますが、その緩さ故に、別環境ではうまくいかないので混乱することもあるというのが秀丸マクロの奥深さでもあるというところでしょうか。

>引き出しは多い方がいいと思ったのですがあまり参考にならなかったようで残念です。

いいえ、大変、参考になります。
こうやって短めのコードで語ってくれるのは、もちろん私にとっても、そして私以外のマクロ初心者にとっても、ありがたいものだと思います。

ありがとうございました。
[ ]
RE:42412 ファイルのなかにある文字列でマクロの動き変えることNo.42413
igus さん 25/12/25 04:36 [ コメントを投稿する ]
  ちなみにh-tomさんのおっしゃってた
>非表示でファイル開いて検索するか
というのはこんな感じだと思います。

openfile "/h hogehoge.html";
searchdown "foobar",loop;
#r=result;
#hwnd=hidemaruhandle(0);
setactivehidemaru 1;
closehidemaruforced #hwnd;
if(#r>0){message "foobarみっけ";}
[ ]
RE:42413 ファイルのなかにある文字列でマクロの動き変えることNo.42414
(-L-) さん 25/12/25 09:34 [ コメントを投稿する ]
>というのはこんな感じだと思います。

このくらいになってくると、ちょっと面倒だな感が出始めます。
どういう考えになっているかというと

openfileしたあとに、ファイルの先頭というのは保証されるのかな。(調べてもよくわからんな)
たしか、ファイルの先頭にもっていくコマンドあったな。(行が増えるな。面倒くさくなってきた。)
そもそも動きとしてエレガントな感じがしないし、コードも長くなってくるし。。(の感情が芽生えてくる)

みたいな感じです。
やりたいことベースで、
あらゆる環境設定がされていても、ビシッと動く最小限コード集
みたいなのがあって(もしくは自作しておいて)、コピペで済ませていけば良いのですが。

公開されている既存マクロからもってこようとしても、高度な処理(かつコメントも無かったり、高度で理解できなかったり)に埋もれてて、それも面倒になってきてしまうという。
このような短いマクロ例だけが集まっている。みたいなものが、どっかに公開されていたりするのでしょうか。
[ ]
RE:42414 ファイルのなかにある文字列でマクロの動き変えることNo.42415
秀丸担当 さん 25/12/25 16:20 [ コメントを投稿する ]
  一応マクロヘルプが最も基本的なサンプルも含まれているということになります。
有志ではh-tomさんの秀丸エディタQ&A集があったりします。

最近のAIではGoogle NotebookLMにWeb版ヘルプのURLを入れるだけで、特化したAIを誰でも作れるようです。
以下のものは少し前にV9.48で試してみたもので、Web版ヘルプのURLを4つ登録しただけのものです。
https://notebooklm.google.com/notebook/2e70f160-9bd6-4dbf-8246-0b117a0235a8
一番最初のご質問の文章だけをまるごと入れてみたら、JavaScriptでloadTextFileの方法を提案してくれました。(実行はフルパス部分とHidemaruをhidemaruの誤りだったので直して実行)
今回はたまたまいい感じでしたが、必ずしも正解とは限らないので注意が必要です。
[ ]
RE:42415 ファイルのなかにある文字列でマクロの動き変えることNo.42416
(-L-) さん 25/12/25 16:41 [ コメントを投稿する ]
>有志ではh-tomさんの秀丸エディタQ&A集があったりします。
>https://notebooklm.google.com/notebook/2e70f160-9bd6-4dbf-8246-0b117a0235a8

おお!言ってみるものですね。
こういったものを公式ページのわかりやすいところからリンク集として公開いただけるといいのですが。

>今回はたまたまいい感じでしたが、必ずしも正解とは限らないので注意が必要です。

AIは必ずしも正しい答を出さないという、よくあるメッセージ付で構わないと思います。


ちなみに、igusさんが提示してくれたコードを例にすると

私が書いた

>openfileしたあとに、ファイルの先頭というのは保証されるのかな。(調べてもよくわからんな)
>たしか、ファイルの先頭にもっていくコマンドあったな。(行が増えるな。面倒くさくなってきた。)

の件は、おそらく

searchdown "foobar",loop;

の、searchdown に loopをつけることで問題がなく動く。
という話なのだと推測します。

でも、これは、igusさんのようなマクロに明るい人だから、できることかと。

私のような初心者だと、ファイルの先頭から検索しないと漏れるかもと思ってしまいますし、
searchdown のヘルプを読んでみても、loopというのが指定できますよ。とは書いてあるのですが、loopというものがどういう動きをするのかまで読み取れるヘルプの記載になっているとは思えないです。

なので、紹介いただいたAIのものなどは、とても助かると思います。
[ ]

[ 新規に投稿する ]