マクロが終了しないNo.08496
伯林 さん 17/04/21 11:55
 
空  ←改行のみ★
県名 1行
空  ←改行のみ★
2007-07-02 07:44:52 | 学校名××× 1行
空  ←改行のみ
本文5〜6行

上のようなテキストデータが50ほど連なるファイルがあります。
県名の1行上と1行下に改行のみの行(★印)があるのを確認したくて、以下のよう
にしましたが
マクロが終了しません。finddownの使い方もおかしい気がします。
生まれて初めて作ったあちこちからの寄せ合わせマクロです。
どこがおかしいのか御教示をお願いいたします。

setcompatiblemode 0x0F;
gofiletop;searchdown "^?....-..-.. ..:..:..?...*" , regular, nocasesense, hi
light;
while ( code != eof ) { //←この行が機能していない。
if(result == 0){break;}
gofiletop;
finddown;
 up 3;
 golinetop;
 if (code == 0x0d){
 }else{message "Hello1";}
 down 2;
 golinetop;
 if (code == 0x0d){
 }else{message "Hello2";}
finddown;
}
endmacro;

[ ]
RE:08496 マクロが終了しないNo.08497
山紫水明 さん 17/04/21 20:13
 
 伯林さん,

>生まれて初めて作ったあちこちからの寄せ合わせマクロです。
>どこがおかしいのか御教示をお願いいたします。
>
 初めてのマクロとしては少し難しい課題に挑戦されているようですね。
 searchdown と finddown の組み合わせはこの場合少しややこしそうですので,
次のようにしたらどうでしょう。

//-------------------------------------//
gofiletop;
while ( code != eof ) {
    searchdown "^....-..-.. ..:..:.....*", regular, nocasesense, hilight;
    if(result == 0){
        break;
    }
    up 3;
    golinetop;
    if (code == 0x0d){
        message "Hello1";
    }
    down 2;
    golinetop;
    if (code == 0x0d){
        message "Hello2";
    }
    down 2;
}
endmacro;
//-------------------------------------//

                  山紫水明
                    SANSHISUIMEI

[ ]
RE:08497 マクロが終了しないNo.08498
伯林 さん 17/04/21 23:02
 
>gofiletop;
>while ( code != eof ) {
>    searchdown "^....-..-.. ..:..:.....*", regular, nocasesense, hilight;
>    if(result == 0){
>        break;
>    }
>    up 3;
>    golinetop;
>    if (code == 0x0d){
>        message "Hello1";
>    }
>    down 2;
>    golinetop;
>    if (code == 0x0d){
>        message "Hello2";
>    }
>    down 2;
>}
>endmacro;

山紫水明さん さっそくレス頂き感謝致します。お教えいただいたコードを下記のよ
うにし、目的を達しました。
gofiletop;
 while ( code != eof ) {
     searchdown "^....-..-.. ..:..:.....*", regular, nocasesense, hilight;
     if(result == 0){
         break;
     }
     up 3;
     golinetop;
     if (code != 0x0d){message "Hello1";}
     down 2;
     golinetop;
     if (code != 0x0d){message "Hello2";}
     down 2;
      }
message "終了";
endmacro;
マクロが終了しなかった訳も何となく分かるような気がします。
最終的にはHello1,2の位置に行番号が入ればいいなと思っています。
二日ほど悩み、どうにもならないので質問しました。
ありがとうございました。


[ ]
RE:08498 マクロが終了しないNo.08499
山紫水明 さん 17/04/22 16:07
 
 伯林さん,

>最終的にはHello1,2の位置に行番号が入ればいいなと思っています。

 行番号を表示するには str(y),または str(lineno)を使用します。たとえば,
messaeg  str(y);
message "Hello2:" +  str(y);

                    山紫水明

[ ]
RE:08499 マクロが終了しないNo.08500
伯林 さん 17/04/22 18:04
 
山紫水明さん ありがとうございます。

> 行番号を表示するには str(y),または str(lineno)を使用します。たとえば,
>messaeg  str(y);
>message "Hello2:" +  str(y);

私は無い知恵をしぼって
#num = lineno
message str(#num);
としましたらとんでもない数字が出て、またまた悩んでいました。
全く作業には支障ありませんが、お教えいただいた
messaeg  str(y);
は実際の行番号-1となるのが不思議です。yの最小値はゼロでしょうか。
でもおかげさまで初体験のマクロは上々のものとなりました。
お付き合いいただき感謝感激です。

[ ]
RE:08500 マクロが終了しないNo.08501
山紫水明 さん 17/04/22 19:57
 
 伯林さん,

>実際の行番号-1となるのが不思議です。yの最小値はゼロでしょうか。

ヘルプに
「カーソルのy座標を表します。y座標は、現在編集中のテキストの先頭行から
ワープロ的に行番号を計算した値です。
 一番上にいる時が0です。 」

とあります。ちなみに,lineno については

「 カーソル位置の、エディタ的に計算した行番号を表します。
ファイルの先頭が1です。」

                    山紫水明

[ ]
RE:08501 マクロが終了しないNo.08502
伯林 さん 17/04/22 21:35
 
山紫水明さん

y値はワープロ的に行番号を計算した値で先頭は0。
linenoは エディタ的に計算した行番号で先頭が1。
ありがとうございました。

このフォーラムの使用法にも少し慣れました。
また行き詰ったらお知恵を拝借したいと思います。
その時は宜しくお願い致します。

[ ]