REM行を削除して出力したいのです。No.05317
kanan さん 06/11/22 21:21
 

初めまして、秀丸を建築構造一貫計算ソフト「BUS−3」のテキストデータ作成に
使用させていただいています。

物件毎に必要なレコード、必要でないレコードがあり必要ないレコードは行頭にRE
Mをつけて認識しないように

しています。次回の別件で必要になるためレコードを消去せず残しREMを使用して
います。

計算に使用するデータとしてはこれで良いのですが、出力しチェックする場合にはR
EM行の不要部分は

削除して出力したいのです。このようなものが既にマクロとしてできているのではな
いかと思います。

もしございましたらご紹介いただけませんでしょうか。

データ例
REM/BLA/0,0,0,0,0,0,0,0               '消去
BLF/1,2,  3,  3,0*8,-408                   '
    /1,2,  2,  2,0*2,+119,+235,350*5
    /1,2,102,102,-301              
REM/BLS/103,2,3,  3,  3,-50           '消去
BLR/  2,2,2,101,109,216              '
REM/  2,2,2,105,109,-28.9             '消去
    /  2,2,2,104,104,-32.4              '消去
    /  2,2,2,103,103,-36.2              '消去
    /  2,2,2,101,102,-40.0              '消去
    /  1,2,2,101,102,-56.2             '消去
BLB/2,  1,  1,101,104            '
SG  /FG105,50,100,,  ,                  '
    /FG104,45,100,,  ,  
    /FG103,30,100,,  ,  

REM行及びREM行から次のレコードに変わる間のレコード名のない(REM行と同じと見な
す)行を削除して

プリントアウトしたいのです。出力が1/3程になりチェックが省力化できます。宜
しくお願い申し上げます。

何卒宜しくお願い申し上げます。

[ ]
RE:05317 REM行を削除して出力したいのでNo.05318
三月 さん 06/11/22 22:26
 
>データ例
>REM/BLA/0,0,0,0,0,0,0,0               '消去
>BLF/1,2,  3,  3,0*8,-408                   '
>    /1,2,  2,  2,0*2,+119,+235,350*5
>    /1,2,102,102,-301              
>REM/BLS/103,2,3,  3,  3,-50           '消去
>BLR/  2,2,2,101,109,216              '
>REM/  2,2,2,105,109,-28.9             '消去
>    /  2,2,2,104,104,-32.4              '消去
>    /  2,2,2,103,103,-36.2              '消去
>    /  2,2,2,101,102,-40.0              '消去
>    /  1,2,2,101,102,-56.2             '消去
>BLB/2,  1,  1,101,104            '
>SG  /FG105,50,100,,  ,                  '
>    /FG104,45,100,,  ,  
>    /FG103,30,100,,  ,  
>
>REM行及びREM行から次のレコードに変わる間のレコード名のない(REM行と同じと見
>なす)行を削除して
>

こんな感じでいかが?
先頭3文字だけで判断
//---------------------------------
gofiletop;
#l = y;
#remflg = false;
while(#l < linecount2 -1){
  $top = gettext2(0, #l+1, 3, #l+1);
  //message($top);
  if( $top == "REM" ){
    // 行削除
    deleteline;
    // REM有効範囲
    #remflg = true;
  } else if( $top == "   " ){
    // REMの続きか?
    if( #remflg ){
      // 行削除
      deleteline;
    } else {
      // REMでない続き
      down;
      #l = y;
    }
  } else {
    // REMでも空白でもない
    down;
    #l = y;
    // REM有効範囲でない
    #remflg = false;
  }
};

[ ]
RE:05317 REM行を削除して出力したいのでNo.05319
白雲斎 さん 06/11/22 23:02
 
こんにちは kanan さん、白雲斎です。

>REM行及びREM行から次のレコードに変わる間のレコード名のない(REM行と同じと見な
>す)行を削除して

・レコード名は、アルファベット文字列が行頭から始まる。
・REM行が継続している行の先頭には、半角空白かダブがある。

と言う条件ならば、末尾のマクロでどうですか。
秀丸エディタは、バージョン 6.00 以上で実行してください。



setcompatiblemode 517;
disabledraw;
gofiletop;
searchdown2 "^REM */.+\n", regular;
while( result )
{
    delete;
    while( code == 0x09 || code == 0x20 )
    {
        selectline;
        delete;
    }
    finddown2;
}
gofiletop;
enabledraw;
readonlyswitch; // 上書き保存しないための対処
endmacro;

[ ]
RE:05317 REM行を削除して出力したいのでNo.05321
K'zawa さん 06/11/23 12:15
 
kananさん、こんにちは。
K'zawa/ユーザーです。

すでにいくつか挙げられていますが…。

レコードの先頭は、半角英大文字が行頭にあって、
続きの行はそれ以外の文字が行頭にあるものとして、
下記のマクロはどうでしょう?

------------------------------------------
    disabledraw;
Loop:
    replaceallfast "^(REM).+\\n([^A-Z])","\\1\\2",regular;
    if(result) goto Loop;
    replaceallfast "^REM.+\\n","",regular;
    gofiletop;
------------------------------------------

[ ]