記事閲覧

− 野ざらし言 −

5735 Re^3: N88-BASICのRENUMのようなマクロ

めざら 2025/03/30(Sun) 23:40 [5734]へのコメント
http://mezala.la.coocan.jp/
> 要は上限を超えるときの挙動をあらかじめ決めておきたい、ということです。

それ,先に言ってくださいよ。(^^;
こちらも察することができなくて申し訳ないですが,極論から入るみたいな論法って元公務員は慣れていないので苦手なんです。

先に不整合な値を確認して実行可不可を決めるのは至極真っ当だと思います。

将来的に,開始行番号や増分の初期値を可変にするのは簡単ですね。起動時にオプションの初期値メニューを表示して,そのままでよければ一打で実行というのはよくある。わたしもそういうマクロは作りますから,部品を流用できます。

列挙していただいた正統性要件であれば,わりにチェックは簡単ですね。
一行ごとに判定するのは時間がかかりますが,まぁ,そこは人間が目視で判断しようとするのは現実的でないのは明らかですから,これも至極真っ当。

> 「1文字ごとに cd で見ていく」

カーソルの移動がともなうので,かなり速度が落ちますね。
他のやりようとしては,ラインバッファを文字列として取得し,文字列関数を使うという手が考えられます。実際に試してみないと,どの関数が適任かわからないけど例えば…
&Sw(p) : 文字列pのスペース/タブまでの文字数
こんなのが如何にも使えそうじゃないですか?

> ・半角数字で始まっていない行がある
これは超簡単で,(cd<$30 || cd>$39) で判定できますね。
ただし,どのみち
> ・行頭の半角数字を数値として取得
ということであれば,
行頭で &n を実行して戻り値が -1 なら数字ではないと判定しつつ
行番号も取得できます。

ただし,
> したときに上限値を越えている
……かどうかは,正確な判定が必要ですね。

実は,わたしにはその必要性がちょっと理解できませんでした。
行番号の値が上限値を越えていても,処理の中で丸めてしまえばよくないですか?

・行頭の半角数字列のあとが半角空白でもタブでもない
ここに &Sw(p) が使えそうですね。最初の空白文字まで5文字以下ならよさそう。
もちろん上限値も5文字に含まれるので,複数条件でチェックする必要がありますけれど,5桁で先頭の数字が5以下なら &n で取得した値で大丈夫(負になる可能性もあるので判定は慎重にすべきですが)。6だったら,より正確に判定が必要。5桁で先頭が7以上は不正な値確定。

> ぅぉぉ、こういうのがほしかったんですよ。

上限値が16ビットで(正負を注意すれば)扱える範囲なので,ご参考までに。

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

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

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

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

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


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

処理 記事No. 暗証キー