|
>
>今回マクロで行いたいのは、数字の下一桁は、そのまま残して、二桁目以上を連番
>になるように書き換えられれば目的を達します。
>O番号の直後に来る下一桁目が0のN番号をN10,下一桁が9のN番号はN19,その次はN2
>0とN29、N30とN39という具合です。
N10からN19までに N20とか他の数値が入らないことを前提に
Nのあとの数値(下1桁を除いた)が変わったらカウントアップさせる
と、いうことで割と愚直に書くとこんな感じかな。
------------------ここから
#NUM=0;
gofiletop;
while(1){
down; // 次の行
if( !result ) endmacro; //なければ終り
// 1文字目取得
$cmd = gettext(0, y, 1, y);
//message $cmd;
if($cmd == "O"){
// O番号
#NUM=0; // 連番リセット
$ORG=""; // 置換え前数値リセット
} else if($cmd == "N"){
// N番号
$num = ""; // 番号の初期化
#n = 1; // 2文字目から
// Nに続く数値を取得
while(1){
// 1文字ずつ取得
$s = gettext(#n, y, #n + 1, y);
if( $s >= "0" && $s <= "9" ){
// 数値なら連結
$num = $num + $s;
} else {
// 数値以外で抜ける
break;
}
// 次の文字へ
#n = #n + 1;
}
//message $num;
#l = strlen($num) -1; // 置き換える文字数
// 下1桁を省いた数値
$kami = leftstr($num, #l);
moveto 1, y ; // 数値の先頭へ移動
// 不要な数値を削除
while( #l > 0 ){
delete;
#l = #l -1;
}
if( $ORG != $kami ){
// 置き換える数値が変わったら
#NUM = #NUM + 1; // カウントアップ
$ORG = $kami; // 置換え前数値更新
}
// 置き換える数値
$chg = str(#NUM);
insert $chg;
}
}
------------------ここまで
|
|