整形用マクロNo.00067
shin さん 98/01/14 02:12
 
shinと申します、こんにちは。

 0  1  2  3
 4  5  6  7
10 11 12 13
14 15 16 17
20 21 22 23
24 25 26 27

というように、スペースで区切られたデータがあります。
今、4*2の8個のデータからなるブロックが3つあると思っ
て下さい。これを、

0 10 20
1 11 21
2 12 22
3 13 23
4 14 24
5 15 25
6 16 26
7 17 27

このように整形したいのです。実際のデータは、8*64
の512個のデータからなるブロックが、3個から10個続
いています。1つのデータは、-5.3192とか1.002542で
す。また区切りのスペースの数は、2 or 3 or 4個です。

このように整形するマクロは作れますでしょうか?
自分でも努力しているのですが、なにぶんマクロ制作は
初心者なもので望んだ結果が得られません。

アドバイスをいただけないでしょうか?
(できれば、整形後は新しいファイルに保存したい)

P.S. マクロで、正規表現は使えないのでしょうか?
     また、空行を削除するのはどうすればよいでしょ
     うか??

[ ]
RE:00067 整形用マクロNo.00068
shin さん 98/01/14 08:35
 
shinです。
マクロで、

replaceallfast " ", "\n";

などを実行すると、改行してほしいところが、
"J"が反転されて表示され、一度保存してから、
もう一度読み直すと改行されます。

どうしてでしょうか?

[ ]
RE:00067 整形用マクロNo.00069
EMiCC さん 98/01/14 12:20
 
はじめまして、EMiCC と申します。

>P.S. マクロで、正規表現は使えないのでしょうか?

ガンガン使えます。

>     また、空行を削除するのはどうすればよいでしょ
>     うか??

2連の改行を1個の改行に変換すればOKのはずです。

  replaceallfast "\n\n", "\n";

こんな感じですか。
スペースやタブだけの行も含めるなら

  replaceallfast "\n[ \t]*\n", "\n";

あたりでいくんじゃないでしょうか。
でも動作確認はしていないので、うのみにはしないでくださいね。

マクロはせいぜい2〜3行のものしか作ったことがないので、本文の方の質問
には難しくて答えられません。
ごめんなさい。

[ ]
RE:00069 整形用マクロNo.00070
shin さん 98/01/14 12:57
 
shinです。お返事ありがとうございます。

>2連の改行を1個の改行に変換すればOKのはずです。
>
>  replaceallfast "\n\n", "\n";

最初これをやってみたのですが、(マクロじゃなく、
普通の置換ならうまくいきますよね)なぜかうまくい
きませんでした。何も変換していない様子です。

>ガンガン使えます。

"^"とか"."とか"+"とかを使うのはどうすればよい
でしょうか?

[ ]
RE:00070 整形用マクロNo.00071
shin さん 98/01/14 13:30
 
shinです、いっぱい書き込んでしまって申し訳ないです。

目的を果たすために、
1. よけいなコメントを消し、一列に並び替える。
2. 空行を消す。
3. 目的のテーブル型に並び替える。

という作戦で行っています。配列などを使って、うまく
やりたいのですができなかったのでかなり格好悪いです。

その最終段階の3.なのですが、以下のようなマクロにし
ました。

#i =513;
while(#i < linecount){
  movetolineno 1,#i;
  beginsel;
  movetolineno 1,#i+512;
  cut;
  gofiletop;
  moveto linelen,0;
  pasterect;
  #i=#i+512;
}

3列くらいまではうまくいくのですが、なぜか途中でマクロ
が終わってしまいます。なぜでしょうか?

[ ]
RE:00070 整形用マクロNo.00072
shin さん 98/01/14 17:20
 
shinです。

>"^"とか"."とか"+"とかを使うのはどうすればよい<br>
>でしょうか?<br>

これは、regularオプションでできました。

[ ]
RE:00071 整形用マクロNo.00073
shin さん 98/01/14 17:47
 
shinです。71の問題以外は何とか以下のマクロで解決しました。
一人で騒いでしまって、申し訳ないです。卒業がかかっている
もので。(^^;;


//コメント行を消す
gofiletop;
deleteline;
deleteline;

//一列に並び替える
replaceallfast " +", "\n",regular;

//空行を削除
//replaceallfast "", "",regular; <--うまくいかない
gofiletop;
#i=0;
while(#i < linecount -1){
  moveto 0,#i;
  delete;
  #i = #i+8;
}

//2ブロック目以降の行頭に空白を挿入
#i=513;
while(#i < linecount-1){
  movetolineno 1,#i;
  insert " ";
  #i=#i+1;
}


//並び替え。途中で終わってしまうので仕方なく全体を3回
//繰り返す。当然正常終了しない...
#j = 0;
while(#j < 3){
  #i =513;
  while(#i < linecount-1){
    movetolineno 1,#i;
    beginsel;
    movetolineno 1,#i+512;
    cut;
    gofiletop;
    moveto linelen,0;
    pasterect;
    #i=#i+512;
  }
}

[ ]
RE:00073 整形用マクロNo.00074
EMiCC さん 98/01/14 18:10
 
EMiCCです。
00069では、いいかげんなマクロを書いてしまってすいませんでした。

>//空行を削除<br>
>//replaceallfast "", "",regular; <--うまくいかない<br>

  replaceallfast "^\\n", "", regular;

でOKです。(今度は確認しました)

[ ]
RE:00074 整形用マクロNo.00075
shin さん 98/01/14 19:46
 
shinです。

>  replaceallfast "^\\n", "", regular;<br>

うまくいきました。\(^o^)/
どうもありがとうございます。あと残る問題は、
途中で並び替えが勝手に終了してしまうことだけです。

アドバイス、どうもありがとうございました。


[ ]
RE:00075 整形用マクロNo.00076
杉浦 まさき さん 98/01/15 00:05
 
shin さん、こんばんは。
 杉浦 まさき と申します。

>あと残る問題は、
>途中で並び替えが勝手に終了してしまうことだけです。

1行1データになった時点から、以下の物に差し替えてみて下さい。

//--------- START ----------//
#D_NUM = 8;
#R_NUM = 64;

gofiletop;
##a = 0;
while( ##a < #R_NUM ){
    ##b = 0;
    while( ##b < #D_NUM ){
        $data[##a][##b] = gettext(0,y,linelen,y);
        deleteline;
        ##b = ##b + 1;
    }
    ##a = ##a + 1;
}
##b = 0;
while( ##b < #D_NUM ){
    $$itext = "";
    ##a = 0;
    while( ##a < #R_NUM ){
        $$itext = $$itext + $data[##a][##b] + " ";
        ##a = ##a + 1;
    }
    insertfix leftstr($$itext,strlen($$itext)-1) + "\n";
    down 1;
    ##b = ##b + 1;
}
//-----------END------------//

但し、テストはしてないんでちょっと書き換えが必要かも(^^;。

[ ]
RE:00076 整形用マクロNo.00078
shin さん 98/01/15 20:29
 
shinです、こんにちは。
どうもアドバイス、ありがとうございます。

>1行1データになった時点から、以下の物に差し替えてみて下さい。<br>

やってみたのですが、ちょっとぐちゃぐちゃに
なってしまうようです。どうなっているのかが
良くわからないので、もう少し調べて、ご報告
します。

どうもありがとうございます。

[ ]
RE:00078 整形用マクロNo.00079
杉浦 まさき さん 98/01/16 00:34
 
shin さん、こんばんは。
 杉浦 まさき です。

>やってみたのですが、ちょっとぐちゃぐちゃに
>なってしまうようです。

ちょっとボケをかましてましたm(_ _)m。
 んで、前の奴の最後から3行目にある
 down 1;
 を
 movetolineno 1, lineno+1;
 に置き換えてみて下さい。
 これで多分大丈夫だと思います。
 #今度はちゃんと(?)テストしてみました(^^;。

[ ]
RE:00079 整形用マクロNo.00081
shin さん 98/01/21 02:45
 
こんばんは、shinです。
返事が大変遅くなり、まことに申し訳ないです。

教えていただいたマクロの#D_NUMや#R_NUMを
変えまして、(僕の説明が悪かったようです)
希望の動作をするマクロを作ることができました。
どうもありがとうございました。

ただ、そのマクロで処理していますと非常に時間
がかかるので、結局現在では、perlでスクリプト
を書き、処理をしています。(perlも今回必要に
迫られ初めてスクリプトを書いたような状態なの
でひどいスクリプトですが)

perlではその処理は一瞬(1,2秒)で終わるの
ですが、同じようなことをするのに秀丸では5分く
らいかかってしまいます。もう少し勉強して、効率
の良いマクロをかけるようになろうと思います。

どうもありがとうございました。


[ ]