[ 新規に投稿する ]

秀丸エディタ マクロに関してNo.36262
SunSolaris さん 17/12/31 15:00 [ コメントを投稿する ]
   はじめまして、プログラミング初心者の者ですが宜しく御願いいたします。
ファイル全体から文字列"/"を検索し、全ての文字列"/"右後ろ1行目に文字列
"馬身"を追加するマクロを作成しているのですが以下のエラーメッセージが出力
されます。

[出力メッセージ]
式がおかしいです。
キーワード/関数/式:searchdown

[マクロの内容]
movetolineno 1,1; 
//カーソルを最初の文字に移動する

while( code != eof ){
//ファイルの終わりまで以下の処理実行します 
 if( searchdown "/" , hilight ==yes ){ 
//文字列"/"の有り無し判断
  right 1;
//カーソル右移動(移動数
  insert "馬身";
//文字列の挿入"馬身"
  }
 
   }

どうか御教授を御願い致します。
[ ]
RE:36262 秀丸エディタ マクロに関してNo.36263
h-tom さん 17/12/31 15:59 [ コメントを投稿する ]
 
h-tom です。

> はじめまして、プログラミング初心者の者ですが宜しく御願いいたします。
>ファイル全体から文字列"/"を検索し、全ての文字列"/"右後ろ1行目に文字列
>"馬身"を追加するマクロを作成しているのですが以下のエラーメッセージが出力
>されます。
>
>[出力メッセージ]
>式がおかしいです。
>キーワード/関数/式:searchdown

searchdown は "関数" ではなく、"文"です。
関数と違い、結果を返しません。

ですから、以下のような使い方は出来ません。
> if( searchdown "/" , hilight ==yes ){ 

searchdown のマクロヘルプをよく読むと、以下の記述があります。
>  成功したかしなかったかによって結果コードを返します。結果コードは
>  resultキーワードで参照することができます。
>  成功した場合は 1 (true)になり、失敗した場合は 0 (false)になります。
つまり、searchdown 文 を実行した場合、結果は result キーワードで確認
します。

    searchdown "/" , hilight;
    if(result == true){
        //検索にマッチした場合の処理
        
    }
[ ]
RE:36263 秀丸エディタ マクロに関してNo.36264
SunSolaris さん 18/01/04 04:19 [ コメントを投稿する ]
   早速のご連絡有難う御座います、連絡が遅くなり大変申し訳ありません。

>
>>ファイル全体から文字列"/"を検索し、全ての文字列"/"右後ろ1行目に文字列
>>"馬身"を追加するマクロを作成しているのですが以下のエラーメッセージが出力
>>されます。
>>
>>[出力メッセージ]
>>式がおかしいです。
>>キーワード/関数/式:searchdown
>
>searchdown は "関数" ではなく、"文"です。
>関数と違い、結果を返しません。
>
>ですから、以下のような使い方は出来ません。
>> if( searchdown "/" , hilight ==yes ){ 
>
>searchdown のマクロヘルプをよく読むと、以下の記述があります。
>>  成功したかしなかったかによって結果コードを返します。結果コードは
>>  resultキーワードで参照することができます。
>>  成功した場合は 1 (true)になり、失敗した場合は 0 (false)になります。
>つまり、searchdown 文 を実行した場合、結果は result キーワードで確認
>します。
>
>    searchdown "/" , hilight;
>    if(result == true){
>        //検索にマッチした場合の処理
>        
>    }
 上記の通り以下のように記述したのですが

 movetolineno 1,1; 
//カーソルを最初の文字に移動する

while( code != eof ){
//ファイルの終わりまで以下の処理実行します
 searchdown "/" , hilight;  
  if(result == true){ 
//文字列"/"の有り無し判断
  right 2;
//カーソル右移動(移動数
  insert "馬身";
//文字列の挿入"馬身"
  
  }
   
    }

 copy;
 begingroupundo;
 replaceallfast "\x09" , "," , nohilight;
 if( ! result )  beep;
 endgroupundo 1;
 selectword2;

ファイル全体から文字列"/"を検索し、全ての文字列
"/"右後ろ1行目に文字列"馬身"を追加に成功するのですが
無限ループになります恐れ入りますが御教授を御願い致します。
[ ]
RE:36264 秀丸エディタ マクロに関してNo.36265
h-tom さん 18/01/04 09:12 [ コメントを投稿する ]
 
h-tom です。

>ファイル全体から文字列"/"を検索し、全ての文字列
>"/"右後ろ1行目に文字列"馬身"を追加に成功するのですが
>無限ループになります恐れ入りますが御教授を御願い致します。

searchdownは、検索で見つからない場合はカーソルを動かさないので、
終了条件である、ファイルの終端には移動しません。
その為、無限ループになってます。
>while( code != eof ){
>//ファイルの終わりまで以下の処理実行します

検索に失敗した場合、ループを抜けるようしてください。
[ ]
RE:36264 秀丸エディタ マクロに関してNo.36266
K'zawa さん 18/01/04 14:10 [ コメントを投稿する ]
  SunSolarisさん、こんにちは。
K'zawa/ユーザーです。

やろうとしていることは、こういうことでしょうか?

replaceallfast "/.", "\\0馬身", regular, nohilight;
[ ]
RE:36264 秀丸エディタ マクロに関してNo.36267
秀丸担当 さん 18/01/05 09:20 [ コメントを投稿する ]
 
h-tomさんもご指摘されていますが、searchdownに失敗したときにbreakでループを抜けるようにするといいと思います。
例えば以下のようにします。

while( code != eof ){
 searchdown "何らかの検索";
  if(result == true){ 
    //何らかの処理
  } else {
    break; //whileループを抜ける
  }
}
[ ]

[ 新規に投稿する ]