PRINT USING文の例外状態処理

PRINT USING文で,書式のあふれが起こると,既定の回復手続きが適用され,出力欄を星印で埋め,次行に書式化されない形で出力し,さらに改行して例外状態にならなかったときと同じ印字位置から続行することになっています。たとえば,

10 LET a=5000
20 PRINT USING "#### ####":2*a, a
30 END

を実行すると,

****
 10000 
     5000

のようになります。
出力欄を星印で埋めるだけで余分な行を出力せずに続行したいときは,PRINT USING文の代わりにUSING$関数を使いましょう。
たとえば,上の20行を

20 PRINT USING$("####", 2*a);" ";USING$("####", a)

に変えると,出力は

**** 5000

になります。

USING$関数は数値の書式化にしか対応しませんが,扱う文字が英数字のみであれば,文字列を書式化する関数の定義は容易です。たとえば,短ければ空白を末尾に追加し,長ければ切り詰めてn文字にする関数を,

DEF format$(s$,n) = s$(1:n) & REPEAT$(" ",MAX(0,n-LEN(s$)))

で定義できます。

PRINT USING文をWHEN EXCEPTION 〜 USEで囲むと,書式のあふれが生じたとき,EXTYPE=8203(指数部のあふれのときはEXTYPE=8204)の例外が発生します。上述の手法で満足できないとき,独自の回復処理を書くことができます。

WHEN EXCEPTION IN
   PRINT USING "#### ####":2*a, a
USE
   SELECT CASE EXTYPE
   CASE 8203,8204
   ! ここに書式あふれ発生時の処理を書く
   CASE ELSE
      EXIT HANDLER
   END SELECT 
END WHEN

戻る inserted by FC2 system