N88互換BASIC for Windows95(手引き書) - PRINT


◇ ; (セミコロン)の省略は不可

10 PRINT A B TAB(20) A$ TAB(30) B$ C
40190 PRINT " 調べるのは、";: COLOR 6: PRINT YY$ " 年度分";: COLOR 7

 N88互換BASICでは、上記のように接続の ;(セミコロン) や ,(カンマ) の省略すると、「文法エラーです」。
 40190 行の場合は、「実行時 エラー'6' オーバーフローしました。」で、N88互換は閉じられてしまう。
◇解決策
 以下のように全ての場所への挿入が必要です。
10 PRINT A; B; TAB(20); A$; TAB(30); B$; C
40190 PRINT " 調べるのは、";: COLOR 6: PRINT YY$; " 年度分";: COLOR 7

Top  88Menu


◇ TAB( )

20 PRINT A$; TAB(20) B$

 上記では、「TAB(20) B$」の間に、 ; (セミコロン)が抜けているためエラーになります。
 下記のように直す必要があります。
20 PRINT A$; TAB(20) ; B$
透明スペーサー
  ; (セミコロン)が抜けているためエラー全般については、すぐ前の項で説明しあります。


20 PRINT A$; TAB(20); B$

10 A$="1234567890": B$="あいうえO"
 上記のようにA$が20桁未満の場合は、DOSと互換は同じ表示をする。
 もしA$が20桁以上になった場合は、エラーは出ないが、DOSとN88互換BASICでは表示が異なる。
 DOS-BASICでは常にB$はTAB(20)の位置に表示するので、B$は次の行の20桁めに表示する。
12345678901234567890
              あいうえお
 N88互換BASICでは、改行せずに、そのままA$に続いてB$を表示する。
12345678901234567890あいうえお


10 PRINT TAB(20); B$
20 PRINT A$; TAB(20); B$

 なお上記10行では、 PRINT 、 LPRINT 、 PRINT #? (ディスク出力)のいずれも同一の結果になる。
 しかし、上記20行では、 LPRINT 、 PRINT #? は別の結果になる。間に挟まるTAB(20)は、 SPACE$(20)と同じ働きをして、A$とB$の間に20桁の半角スペースを挿入する。
 詳しくはLPRINTを参照

Top  88Menu


◇ PRINT :  → PRINT "" :   に

PRINT : *****
LPRINT : *****

450 PRINT " ** "; FJ$(1); "...(1) (4/01-3/31)": PRINT
9500 PRINT: PRINT
 PRINT :は、DOS-BASICでは空白行のPRINT、=即ち1行の改行を行います。
 N88互換BASICでは、450、9500はOKですが、
 ところが以下は、PRINT : の場所で「エラーです」。
 (注:問題の無い場合も有ったような記憶もあります(?)が、不確かです。)
透明スペーサー
415 FOR B=1 TO FA.MAX: IF B=FA.MID THEN COLOR 5: PRINT: PRINT "非常勤→"
510 IF JOB=2 THEN COLOR 6: PRINT: PRINT "(2)の月別給料……"
6350 IF JOB=2 THEN PRINT: GOSUB *MSG2
7560 IF D.OUT$="y" THEN PRINT : PRINT : GOSUB 7600: INPUT Q$
9560 IF A1=1 THEN PRINT :INPUT "プリントの期 間は ";Q$
9565 IF Q$="9" THEN A5P=0: PRINT :INPUT "いつから ";A5P
透明スペーサー
 次のように PRINT : の部分を、 PRINT "":または PRINT " ":に直せばOKです。
415 FOR B=1 TO FA.MAX: IF B=FA.MID THEN COLOR 5: PRINT "": PRINT "非常勤→"
510 IF JOB=2 THEN COLOR 6: PRINT "": PRINT "(2)の月別給料……"
6350 IF JOB=2 THEN PRINT "": GOSUB *MSG2
7560 IF D.OUT$="y" THEN PRINT "": PRINT "": GOSUB 7600: INPUT Q$
9560 IF A1=1 THEN PRINT " ":INPUT "プリントの期 間は ";Q$
9565 IF Q$="9" THEN A5P=0: PRINT " ":INPUT "いつから ";A5P
透明スペーサー
 LPRINT の場合も、まったく同じようです。
3520 LPRINT " ": LPRINT "": LPRINT

Top  88Menu


◇ PRINT :  → PRINT "" :   その2.

PRINT : ***** の別のケース
300 IF JOB<>11 THEN PRINT: PRINT ,"科目のみ変更は (123) を ";

 上記はエラーです。
300 IF JOB<>11 THEN PRINT "": PRINT ,"科目のみ変更は (123) を ";
 このように PRINT : の部分を、 PRINT "":または PRINT " ":に直せばOKであることは、前項で述べたとおり。
300 PRINT : PRINT ,"科目のみ変更は (123) を ";
 ところが、「 IF JOB<>11 THEN 」を削除すると、「 PRINT : 」を残したままでも何故かOKになります。

Top  88Menu


◇ PRINT USING

50 PRINT A$; B; TAB(17); USING " ------ (#########)";J

 PRINT と USINGの間に、TAB(x)、文字、変数の変数(A$やBなど)を挟むとエラーになるので、次のように直します。
50 PRINT A$; B; TAB(17);: PRINT USING " ------ (#########)";J
50 PRINT ; TAB(17); USING "$   $ ####  ------ (#########)";A$; B; J
透明スペーサー

6750 PRINT,, USING "= @の元DATA★=(###,###,###÷#.##)"; URI0#-URI44#; 1+STAX.RITU# ;

 「PRINT,,」(=PRINT + ,コンマ2つ)は、TAB( )を2つ挟む略式です。  しかし上記のように USING と組み合わせるとエラー。
 直すなら、下記のどちらかに。
6750 PRINT,,: PRINT USING "= @の元DATA★=(###,###,###÷#.##)"; URI0#-URI44#; 1+STAX.RITU# ;
  または、
6750 PRINT USING "                   = @の元DATA★=(###,###,###÷#.##)"; URI0#-URI44#; 1+STAX.RITU# ;

Top  88Menu


2530 PRINT USING "##########, ";D#

 もし D#=123456789 の場合、DOS-BASICでは 123,456,789 と表示されるが、N88互換BASICでは千以下が丸められ(カット) 123456と表示。
 DOSと同じように表示したい場合は、次のように直します。
2530 PRINT USING "###,###,### ";D#

Top  88Menu


3370 PRINT USING "金 額......\##,###,### ";D#
3380 PRINT USING "金 額   \##,###,### ";D#

 上記はN88互換BASICではD#=1234567の場合、\は表示されずに、
3370 = 「金 額%1234567......00000000」の表示になってしまいます。最初の「\##」の部分にD#が表示されます。
3380 = 「金 額 #1,234,567」の表示になってしまいます。数字の頭に付ける\マークが、#マークに変わってしまいます。
◇解決策
\と #の間にスペースなどを挟む必要があります。
3370 PRINT USING "金 額......\ ##,###,### ";D#
3380 PRINT USING "金 額   \ ##,###,### ";D#

Top  88Menu


6610 PRINT USING "消費税額・その他 A(&付表4-EC)= ###,###,### = ###,###,###× #%";SYOUHI.T# ; S.TAX00#; STAX.RITU#*100 ;

 上記「A(&付表4-EC)」の「&」が原因でエラー。全角の&に変えたらOK。
 文字列を表示する「 & & 」が片方しか無いと判断するためだろう。

Top  88Menu


100 PRINT USING "現 金  ###,###   ###,###  "; G; H#(0,G); H#(1,G)

 プログラムのミスで、変数の数に対して受ける###が1つ不足の場合、
現 金   1   65,185   現 金    0
 というように画面表示(PRINT)が化ける。
100 PRINT USING "現 金  ### ###,###   ###,###  "; G; H#(0,G); H#(1,G)
 このように変数と受ける###の数を合わせたら
現 金   1   65,185     0
 と、正しく表示された。正しくプログラムを書けば良いこと。

Top  88Menu