教えて下さいNo.04122
さん 04/02/21 17:31
 
文字の挿入について教えて下さい。
1行 600文字(半角英数のみ)のテキストが複数あり、決まった桁100箇所に、
カンマを一括で挿入したいのですが、やり方を教えて下さい。
又、既存のマクロをご存知でしたら教えて下さい。

[ ]
RE:04122 教えて下さいNo.04123
アルビレオ さん 04/02/21 19:14
 
秀丸ユーザーのアルビレオです。

>文字の挿入について教えて下さい。
>1行 600文字(半角英数のみ)のテキストが複数あり、決まった桁100箇所
>に、
>カンマを一括で挿入したいのですが、やり方を教えて下さい。
>又、既存のマクロをご存知でしたら教えて下さい。

タブ文字がないという前提ならマクロでなく一括置換で可能です。
(Jre32.DLLでは無理)
検索:[^\n]{100}(?=[^\n])
置換:\0,
っと、これは「100桁ごとに,を挿入」ですね。
決まった桁というのが等間隔なら、これの応用でいけます。

5桁、10桁区切りの繰り返し
検索:[^\n]{5}\f[^\n]{10}(?=[^\n])
置換:\0,\1,

「決まった桁」がこのような繰り返しでなければマクロを使うことになります。

[ ]
RE:04123 教えて下さいNo.04127
さん 04/02/21 20:36
 
早速の回答、ありがとうございます。

>5桁、10桁区切りの繰り返し
>検索:[^\n]{5}\f[^\n]{10}(?=[^\n])
>置換:\0,\1,
>
>「決まった桁」がこのような繰り返しでなければマクロを使うことになります。

折角、教えていただいたのですが、決まった桁は以下の桁になります。
10
10
 2
 2
 2
 2
10
以下は28回繰り返し
15
 1
 1
 1
 2
繰り返しはここまで
 2

以上で 600文字になります。
又、行数は毎回変わりますが、大体500〜1500行の間になります。
マクロはまったく知らないので、申し訳ありませんが、色々教えて下さい。

[ ]
RE:04127 教えて下さいNo.04134
山紫水明 さん 04/02/22 08:55
 
 優さん,こんにちは。

》折角、教えていただいたのですが、決まった桁は以下の桁になります。
》マクロはまったく知らないので、申し訳ありませんが、色々教えて下さい。

 アルビレオさん,見落とされているのかもしれませんね。
 もしマクロについて全く経験が内容でしたら,マクロのヘルプの初めての
方のための案内をまずご覧ください。
 その上で,次のマクロを登録・実行してみてください。

//-------- InsertComma.mac -----------------------------------//
disabledraw;
gofiletop;
while( code != eof ) {
    call Insert, 10;
    call Insert, 10;
    call Insert, 2;
    call Insert, 2;
    call Insert, 2;
    call Insert, 2;
    call Insert, 10;
    #i = 0;
    while(#i < 28 ) {
        call Insert, 15;
        call Insert, 1;
        call Insert, 1;
        call Insert, 1;
        call Insert, 2;
        #i = #i + 1;
    }
    call Insert, 2;
    #line = lineno;
    movetolineno 1, lineno + 1;
    if( lineno == #line ) break;
}
endmacro;

Insert:
right ##1;
insert ",";
return;
//-----------------------------------------------------//

     では, (^^)/~
                                        山紫水明

[ ]
RE:04134 教えて下さいNo.04135
アルビレオ さん 04/02/22 12:11
 
アルビレオです。

> アルビレオさん,見落とされているのかもしれませんね。
見落としてました。というか、
>又、行数は毎回変わりますが、大体500〜1500行の間になります。
ということなので、「選択範囲内だけで実行するようにしないといけないな」と
思っているうちに放置してしまって。(^_^;

せっかくなので、置換を使う方法にこだわってみます。(この方が高速?)
変換したい範囲を選択してから実行してください。

--------ここから
if(selecting == 0 || rectselecting == 1){
 message "範囲を選択してから実行してください";
 endmacro;
}
disabledraw;
#stx = seltopx;
#sty = seltopy;
#edx = selendx;
#edy = selendy;

replaceallfast "^.{10}\\f.{10}\\f..\\f..\\f..\\f..\\f.{10}", "\\0,\\1,\\2,\\
3,\\4,\\5,\\6,",regular,inselect;
moveto #stx,#sty;
beginsel;
moveto #edx,#edy;
replaceallfast "[^,]{15}\\f.\\f.\\f.\\f..", "\\0,\\1,\\2,\\3,\\4,",regular,i
nselect;
//----行末のカンマが不要なら、以下は削除----
moveto #stx,#sty;
beginsel;
moveto #edx,#edy;
if(column != 0) movetolineno 1, lineno+1;
replaceallfast "$", ",",regular,inselect;
--------ここまで

[ ]
RE:04135 教えて下さいNo.04136
山紫水明 さん 04/02/22 16:22
 
 アルビレオさん,こんにちは。

》せっかくなので、置換を使う方法にこだわってみます。(この方が高速?)

 初志貫徹ですね(^^;
 多分,行数が多くなれば,速度の差が出てきそうです。

》変換したい範囲を選択してから実行してください。

 最初の置換で,桁折り幅によっては行数が変化する可能性があるのでその
処理が必要ではないでしょうか。

     では, (^^)/~
                                        山紫水明

[ ]
RE:04136 教えて下さいNo.04137
アルビレオ さん 04/02/22 20:29
 
アルビレオです。

>》せっかくなので、置換を使う方法にこだわってみます。(この方が高速?)
>
> 初志貫徹ですね(^^;

私もマクロで書くならカーソルで挿入するように考えていたのですが、山紫水明
さんのマクロを見たら思ったよりも行数が多かったので置換の方がスッキリする
かな?と書いてみました。(^^;
いろいろ試してるうちにループを完全になくせることに気づいて「これは速くな
りそうだ」と投稿することにしました。
優さんのコメントでは対象が千行ほどあるということだったので。

> 最初の置換で,桁折り幅によっては行数が変化する可能性があるのでその
>処理が必要ではないでしょうか。

うわ、さすがにそこまでは気づきませんでした。
変更箇所が複数あるので、もう一度全部書いておきます。

--------ここから
if(selecting == 0 || rectselecting == 1){
 message "範囲を選択してから実行してください";
 endmacro;
}
disabledraw;
#stx = seltopx;
#sty = seltopy;
moveto selendx,selendy;
if(column != 0) movetolineno 1, lineno+1;
#endline = lineno;

moveto #stx,#sty;
beginsel;
movetolineno 1, #endline;
replaceallfast "^.{10}\\f.{10}\\f..\\f..\\f..\\f..\\f.{10}", "\\0,\\1,\\2,\\
3,\\4,\\5,\\6,",regular,inselect;
moveto #stx,#sty;
beginsel;
movetolineno 1, #endline;
replaceallfast "[^,]{15}\\f.\\f.\\f.\\f..", "\\0,\\1,\\2,\\3,\\4,",regular,i
nselect;
//----行末のカンマが不要なら、以下は削除----
moveto #stx,#sty;
beginsel;
movetolineno 1, #endline;
replaceallfast "$", ",",regular,inselect;
--------ここまで

[ ]
RE:04137 教えて下さいNo.04138
さん 04/02/22 21:36
 
アルビレオさん、山紫さん、ありがとうございました。
この挿入を手作業で行っていたので、修正、確認と時間がかかっていましたので、大
助かりです。
今までは、マクロは難しいので、自分には無理だと思っていましたが、これからは、
マクロについて学んで自分でもマクロを作れるようになりたいと思います。

[ ]