まずはじめに。> 一方で、ジャンプ先が実在しない場合は、変換例の> 110行目のように、変換が発生しないようにしたい。実機でもこういう仕様だった> と記憶しています。タッチアンドゴーで実家に行き、ちょっとN88-BASICの仕様を確認してきました。 滞在時間5分。 結果、記憶違いもあって。 飛び先の部分の変換が発生しないという部分は正解でしたが、行番号の変換自体 は行われていました。そして、「Undefined line number」なるエラーを吐く。 このエラーは、例えばGOTOの飛び先がないときに発生するエラーなんで、わりと よく見かけるものですが、まさかプログラムの実行時以外で見かけるとは覚えて いなかった。 もうひとつ、RENUMコマンドの引数って「新行番号、旧行番号、増分」なんです が、それぞれの引数は省略可能。そして増分を省略した場合のデフォルトは10。 ここで、先に例に出した4行のプログラムで「RENUM 65520」とかやると、最後 の行の行番号はデフォルトの最大値の65529を越えてしまいます。この場合は 「Illegal function call」エラーとなります。こちらはマニュアルにも明記 してあります。今回検討しているマクロでは、サブセット版であればこの上限値 は別の値でもいいでしょう。 ということで> 増分が1000番刻みって,あまりにも非現実的な気がするこれはおっしゃるとおり。 ただ、「増分が1000」ではなく「初期値が65500」でもいいのですが、要は上限を 超えるときの挙動をあらかじめ決めておきたい、ということです。 そして、その挙動としては、変換を全くはじめることなくマクロが終了すること を希望しています。> そもそも増分をどこで設定するのでしょう。これは、#5731にも書きましたが、マクロのコード内にハードコーディング。 絶対にないと思いますが、将来的には可変にしたい。> > また、BASICとして正当ではない行がある場合。> この判定は,無理ということはないですか?テキスト処理だけで行うと無理かもしれない。だけど、#5731に書いた正統性要件 だけでもチェックしたい。つまり ・半角数字で始まっていない行がある ・行頭の半角数字を数値として取得したときに上限値を越えている (上限値は別途定義) ・行頭の半角数字列のあとが半角空白でもタブでもない これらいずれかの要件を満たす行が1つでもある場合は処理を開始したくない。 ということで、このチェックに当たって私が考えた方法が 「1文字ごとに cd で見ていく」 なのです。というか、これしか思いつかなかった。 もちろん、他にもっと良い方法があればご教示いただきたい。> > 行番号の上限チェック。> 行数と増分の積というわけではないのですか?たぶんそれでいくと思うのですが、何か見落としがあることが怖い。> > 初期値の取得> 例えば,初期値と増分を決めておいてはいけないのですか?上にも書きましたが、増分はマクロコード埋め込みでよいと思っております。 が、初期値については、BASICのコードから、すなわち処理対象ファイルから取得 したい。そして、どうやって取得するかというと、ファイル先頭の行の行番号を 採用するということで。って、このへんのことは#5731にも書いていましたね。> 「カーソル位置の数字列を数値として取得するには」(VZマクロFAQ)ぅぉぉ、こういうのがほしかったんですよ。 とても参考になります。
関連記事一覧ツリー (▼ を押すとツリー全体を一括表示します)
返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)
- 以下のフォームから自分の投稿記事を修正・削除することができます -