いろいろな言語での書式指定子たち#2 - BASIC
前回、FORTRANのFORMAT文というかREAD/WRITEで使う書式を調べたのですが、今回はBASICです。
いろいろな言語での書式指定子たち#1 - FORTRAN
初期のBASICには書式制御なんて機能は存在せず。PRINT文の末尾が「何も無い」「カンマ」「セミコロン」のどれなのかで少しつづ違う働きをさせているだけでした。やはり不便だったのでしょう。割とスグにPRINT USING文が追加されました。USINGは、TK-80BSやPET2001、APPLE][には無くて、TRS-80のLevel2BASICやPC-8001のNBASICには登場しています。
PRINT USINGの使い方は PRINT文を拡張したような感じで、USINGに続いて書式指定文字列を列挙します。基本的な使い方は以下のとおりです。
これら以外の書式もいろいろありますし、細かな部分は機種ごとの違いもあるのですが、大体は以下のように使っていました。
PRINT USING “#,###,###.##”; V
Vの値が123456.78#であれば “ 123,456.78” と出力されます。
N-BASIC
http://www.fjks.jp/abc/img783/N-BASIC-Reference.pdf
N88-BASIC(86) PRINT USING命令
MSX-BASIC/PRINT USING
PRINT文(書式指定)- FullBASIC
※IMAGE文ってあるんだ。
同じ構文はプリンタに出力するLPRINTや、ファイルに出力するPRINT#でも使えます。
ところがBASICの場合は入力に関する書式制御命令はありません。初期のBASICではINPUT文だけだったのですが、この命令で数値や文字列を入力する際の規則が分かりやすいかというと微妙なものがあり、おせっかいはいらないので入力した文字列をとにかくそのまま返して欲しいというLINE INPUT命令が追加されただけでした。
相手が人間の場合は、よほど巧妙な入力方法を提供しないと、指定した書式のとおりに入力してくれることなんてありませんから、それがリーズナブルだと考えられたのでしょう。ファイル入出力の場合は、形式が定まっているのであれば書式ではなくFIELD文を使うのがセオリーです。USING文は出したい文字列の雛形を書くような書式なのでわかりやすくはあるのですが、上手に使うには慣れが必要だった気もします。
長らくBASICの書式指定はUSING文だけで済んでいたのですが、GUIの時代になり出力先がコンソール(画面)やプリンタではなく、何らかの文字列を受け付けるオブジェクトが対象となりました。そこでVisualBASICでは出力とは無関係に書式指定子を適用した文字列を作るFORMAT関数が用意されるようになりました。
VisualBASICも歴史が長いので、その具体的な機能についてはバリエーションがあるのですが、基本的には出力したい値とUSINGで指定していたような文字列を引き数で渡すと、書式を適用した文字列を返してくれる関数になっています。
MyStr = Format(5459.4, "##,##0.00") ' Returns "5,459.40".
MyStr = Format(334.9, "###0.00") ' Returns "334.90".
MyStr = Format("HELLO", "<") ' Returns "hello".
MyStr = Format("This is it", ">") ' Returns "THIS IS IT".
何だか最初からこういう関数があればよかったのではと思わなくも無いのですが、Formatでは単なる値以外にも、日時であるとかロケールの調整機能も持っており、なかなか高機能で複雑なものになっています。
Format 関数
プログラミング言語で何らかの数値の計算をするだけなのであれば、出力すべき書式も限られるのでしょうが、人を相手にやさしく表現したり、厳格な書式を要求するファイルへの出力をしようと思えば、実に複雑な規則を適用したくなります。そうするとある意味、本質ではないかもしれない書式を整える作業は際限なく複雑怪奇なものになりがちで、それを助けるためにUSINGやFORMATも使いこなすのが難しくなってしまいました。でもBASICは多彩な文字列処理を持っているので、書式で頑張ってもらうのは大抵は数値の表現のことが多かった気がします。
ヘッダ画像は、Copilotの作品です。
この記事が気に入ったらサポートをしてみませんか?