whileに関してNo.36996
SunSolaris さん 18/12/30 13:40
 
はじめまして、プログラミング初心者の者ですが宜しく御願いいたします。
ファイル全体から文字列"ブリンカー"がある場合に文字列"○○△△○△ ブリンカー
"を前行の改行位置まで移動させるマクロに関してなのですが?
 下記の記載の場合最初の行のみ上手くいくのですが、

gofiletop;
 searchdown "ブリンカー";
 if( result == true ){
    left;
    wordleft2;
    wordleft2;
    beginsel;
    right 1;
    delete;
    right 1;
    }
  else{
   break;
       }

(実行結果)
1白 2 ○○△△○△ ブリンカー △5 54.0 ○△ □△ 2:36.4



(実行するファイル内容)
1白 2
○○△△○△ ブリンカー △5 54.0 ○△ □△ 2:36.4  
1 1 1 1
40.9 506(+6) ○△ □ 8
4青 7 ○○△△○△ △5 51.0 ○○ □△ 2:36.6 1 1/2
14 14 14 10
39.4 512(+2) ○△ ○□ 6
3 枠8桃 16
○○□□○○ ブリンカー ○5 56.0 ○○ □□ 2:37.0 2 1/2
15 15 14 7
39.8 508(-2) □□ ○○ 3
4 枠3赤 5
○○△△ ブリンカー □4 53.0 ○○ △△ 2:37.2 1 1/4
12 12 9 7
40.5 490(-8) △△ □ 10
3赤 6 △△△△ △6 54.0 △△ □ 2:37.5 1 3/4
9 9 7 5
41.1 510(+10) ○○ □□ 13
6 枠4青 8 ○○○○□□ △4 54.0 □□ ○○ 2:37.6 1/2
4 4 3 3
41.5 494(+12) □□ ○○ 2
6緑 12
○○○○□□ ブリンカー △5 55.0 ○○ □□ 2:37.9 1 3/4
9 9 3 3
41.9 532(+2) △△ □□ 4
5黄 10
○○□□○○ ブリンカー △6 52.0 □ ○○ 2:38.1 1 1/4
15 16 16 15

実行ファイルには最大で"ブリンカー"は18です。

gofiletop;
while( code != eof ){
//ファイルの終わりまで以下の処理実行します
 searchdown "ブリンカー";
 if( result == true ){
             left;
             wordleft2;
             wordleft2;
             beginsel;
             right 1;
             delete;
             right 1;
              }
        else{
           break;
               }
       }
       
 上記のような記載をすると下記の様な結果になってしまいます。

 ブリンカー △7 54.0 ○△ ○□ 2:39.6 3/4
3 3 3 10
43.5 542(+12) □ ○○ 15

 長文になってしまい申し訳ありません、どうか御教授を御願い致します。

[ ]
RE:36996 whileに関してNo.36998
ヒラメ さん 18/12/30 15:21
 
SunSolarisさんこんにちは。
秀丸エディタの一ユーザーの者です。

マクロ書いてみました。もしよければお試しください。

(自宅のPCが壊れていまして全く動作テストができていませんのでもし動かないよう
でしたらすみません。。。)



gofiletop;
replaceallfast "(.+)\\n(.+ブリンカー.+)", "\\1\\2”, regular;
##n = result;
if( ##n == -1 ){
  message “置き換えが中断されました。”;
}else if( ##n == 0){
  message “置き換えの対象が見つかりませんでした。”;
}else{
  message str(##n) + “件の置き換えを行いました。”;
}

[ ]
RE:36998 whileに関してNo.36999
SunSolaris さん 18/12/30 16:41
 
 Sun Solarisです、秀丸エディタの一ユーザーさん早速の御連絡有難う御座います、


>gofiletop;
>replaceallfast "(.+)\\n(.+ブリンカー.+)", "\\1\\2”, regular;◎
>##n = result;
>if( ##n == -1 ){
>  message “置き換えが中断されました。”;
>}else if( ##n == 0){
>  message “置き換えの対象が見つかりませんでした。”;
>}else{
>  message str(##n) + “件の置き換えを行いました。”;
>}

を試してみたのですが下記のメッセージが出力されます。

(◎)式がおかしいです。

キーワード/関数/式:\x09"

 御教授を御願いいたします。

[ ]
RE:36996 whileに関してNo.37000
山紫水明 さん 18/12/30 16:44
 
 SunSolarisさん,

 ヒラメさんのお書きになったような正規表現による全置換という方法がありま
すが,マクロ初心者だということなので,

if( result == true ){
のブロックの最後の
   right 1;

golineend2;
に書き換えてみたらいかがでしょうか。
   right 1;
がなぜまずいかは,
この直後に
message "";
を挿入して動きを見るとわかると思います。

         山紫水明
                  SANSHISUIMEI

[ ]
RE:36999 whileに関してNo.37001
山紫水明 さん 18/12/30 16:55
 
 SunSolarisさん,

>replaceallfast "(.+)\\n(.+ブリンカー.+)", "\\1\\2”, regular;◎

 \\2 の後の引用記号が全角になっていjますね。

                    山紫水明
                    SANSHISUIMEI

[ ]
RE:37000 whileに関してNo.37002
SunSolaris さん 18/12/30 16:58
 
 Sun Solarisと申します山紫水明さん早速の御連絡有難う御座います、

> ヒラメさんのお書きになったような正規表現による全置換という方法がありま
>すが,マクロ初心者だということなので,
>
>if( result == true ){
>のブロックの最後の
>   right 1;
>を
>golineend2;
>に書き換えてみたらいかがでしょうか。
>   right 1;
>がなぜまずいかは,
>この直後に
>message "";
>を挿入して動きを見るとわかると思います。
>
>         山紫水明
>                  SANSHISUIMEI

 上記のように書き換えた所思い通りな動きになりました大変有難う御座います。

[ ]
RE:37001 whileに関してNo.37003
ヒラメ さん 18/12/30 17:09
 
山紫水明さん

>>replaceallfast "(.+)\\n(.+ブリンカー.+)", "\\1\\2”, regular;◎
>
> \\2 の後の引用記号が全角になっていjますね。

すみません、ご指摘ありがとうございました。スマホでなれない入力作業をするもの
ではないですね・・・。


SunSolarisさん

無事解決されたようですが、念の為修正した置き換えマクロも記載しておきます。
今後何かのご参考にしていただければと思います。


gofiletop;
replaceallfast "(.+)\\n(.+ブリンカー.+)", "\\1\\2", regular;
##n = result;
if( ##n == -1 ){
  message "置き換えが中断されました。";
}else if( ##n == 0){
  message "置き換えの対象が見つかりませんでした。";
}else{
  message str(##n) + "件の置き換えを行いました。";
}

[ ]
RE:37003 whileに関してNo.37004
SunSolaris さん 18/12/31 06:58
 
 ヒラメさん御連絡有難う御座いました。
>山紫水明さん
>
>>>replaceallfast "(.+)\\n(.+ブリンカー.+)", "\\1\\2”, regular;◎
>>
>> \\2 の後の引用記号が全角になっていjますね。
>
>すみません、ご指摘ありがとうございました。スマホでなれない入力作業をするも
>のではないですね・・・。

 スマホでの慣れない入力の中御教授頂きまして有難うございます、今後とも宜しく
お願いいたします。


[ ]