記事閲覧

− 野ざらし言 −

5753 Re^9: N88-BASICのRENUMのようなマクロ

としき 2025/04/06(Sun) 13:58 [5746]へのコメント
http://toshiki.la.coocan.jp/
> ちょっと思ってるのと違った。この + は要ります?

可読性向上のための桁そろえ、というのがあるかもしれないと考えました。

とりあえず、私のきちんと動かないバージョンはできました。
きちんと動かないことは理解していますが、条件がそろうと動くこともある、
といった感じ。

= renum.def
i:初期値   initial num
a:増分     addition
n:新行番号 new num
o:旧行番号 old num

*m
1 ^^ "renum.def"
;初期設定                                   ;vwxの常駐確認とか?
a=10,
n=o=0,
                                            ;RXとかの設定も念のためにするべき?
#^ #<                                       ;カーソルを先頭行の行頭にして
&n i=r,                                     ;初期値取得

;メインループ
                                            ;先頭行は行番号の変更なし
:w                                          ;while(次の行に動ければ)
#> #d                                       ;次の行にカーソルを移動し
#d (r==-1)?>u                               ;その結果が最終行ならループ脱出
#<
&n o=r,                                     ;旧行番号取得
n=i+(ln-1)*a,                               ;新行番号算出
#t                                          ;旧行番号削除
&?("%d",n)                                  ;新行番号出力

#56 "GOTO\([ \t]+\)" &?("%d",o) "$$" #m
    "GOTO\1" &?("%d",n) #m "ay"
#56 "GOTO\([ \t]+\)" &?("%d",o) "\([^0-9]\)" #m
    "GOTO\1" &?("%d",n) "\2" #m "ay"
    
#56 "GOSUB\([ \t]+\)" &?("%d",o) "$$" #m
    "GOSUB\1" &?("%d",n) #m "ay"
#56 "GOSUB\([ \t]+\)" &?("%d",o) "\([^0-9]\)" #m
    "GOSUB\1" &?("%d",n) "\2" #m "ay"
>w
:u

*

すぐにわかることですが、このロジックでは、一旦変換した行番号が再変換の
対象になりうるわけです。なので、ここはやっぱり素直に変換表を作るような
ロジックにする必要がある。
逆にいうと、例えば100から始まって990までで終わっているプログラムを
1000からに変換する、みたいな感じで再変換が発生しないような変換だと、
なんとなくうまく動いているっぽい。もちろん、意図的に考慮していない
部分はいっぱいありますが、意図せざる考慮漏れというのがあれば、これで
あぶりだせたらちょっとはうれしいかも。

ということで、めざらさんに提示していただいたコード、これから読解して
いきます。
 

関連記事一覧ツリー (▼ を押すとツリー全体を一括表示します)

- 5731.N88-BASICのRENUMのようなマクロ - としき 25/03/29-14:22

返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)

おなまえ :
Eメール :
タイトル :
メッセージ: 通常モード(推奨)  整形モード(非推奨)  preモード(空白再現)
※ プログラムコード等を含まない場合は,できるだけ通常モードをご利用ください。

参照先 :
暗証キー: (英数字で8文字以内) プレビューなし


- 以下のフォームから自分の投稿記事を修正・削除することができます -

処理 記事No. 暗証キー