インターネット&PC120%活用:PC活用編

文字変数の取り扱い方

FORTRANはもともと科学計算用に設計されたプログラム言語というその出自のため、また
紙のパンチカードで入出力していた時代に生まれたというその設計された時代の古さゆえか、
文字の取り扱いが苦手というか、他のプログラム言語に比べてきわめて不便な感じがします。

*いかに、おじさんが古い人間とはいえ、コンピュータへの入出力に紙のパンチカードを使った
 ことはないんですが、7,8年上の先輩は、大学の計算機センターで紙のパンチカード
 を使ったと語っていました。そういえば、昔の漫画(アトムとか)を見ると大型コンピュータから
 紙のデータがカタカタとでてくる絵がよくありましたね。

*ここの説明はANSI77(FORTRAN-77)規格に準拠して書いていますので、古いです。

1 H型変換による文字の出力
文字列を出力する場合は、FORMAT文に出力したい文字列を直接記述する方法があります。
H型という欄記述子を使い、例えば4文字を出力する場合は 4H と書き、Hの後ろに出力したい
文字列を書きます。
例えば、nameと出力したければ以下のように書きます。
*出力する文字数とHの前の数は正確に一致させておく必要があります。

        WRITE(5,100)
100     FORMAT(4Hname)

Salford FTN77では、
FORMAT('name')
のように出力したい文字列をシングルコーテーションでくくって書くこともできます。

2 文字型変数とA型変換
BASICなんかだと、
hosi = "☆☆☆"
と記述すれば、hosiという文字型変数に☆☆☆が代入されて、はい、おしまい、というわけですが、
FORTRANではそうはいきません。

最近のFOTRANでは、文字の取り扱いにもだいぶ改良がほどこされたようですが、一昔まえの
スタンダードであるANSI77(FORTRAN-77)の規格(SalfordのFotran77もANSI77準拠です)では、
FORTRANの変数にはそもそも文字型変数というものが存在しません。

FORTRANでは数値用の変数を文字データの格納に転用します。
例えば、整数型として宣言した変数には2バイトの文字データが格納できます。
integer hosi →hosiに2バイトの文字が格納できる。
実数型として宣言した変数には4バイト、倍精度実数型として宣言した変数には8バイトの文字が格納
できます。

逆に言うと、変数に格納できる文字データは倍精度実数型の変数の8バイトがMaxで、ひとつの変数に
それ以上の文字列を格納することはできない!、ということです。
不便ですねえ。まあ、科学技術の計算用に生まれた言語ですから、文字は8バイト格納できれば御の字
だったのでしょう。だから、FORTRANは長い文字列を扱うプログラムには不向きです。

文字を格納した変数を出力する場合には、A型変換の欄記述子を使います。
A型変換は、nAwの形をとります。nは繰り返しの回数。wは文字データのバイト数です。
基本的には数値の変数の出力とそう変わりはありません。(数値の出力はFORMAT文(数値)を参照。)
内部のデータ数がwより少ないときは、右詰で文字が出力され左には余った分だけ空白が出力されます。
内部のデータ数がwより多いときは左詰で出力され、出力できずに残った文字は捨てられます。

例えば実数型REALで宣言した変数(4バイト分)に"ABCD"というデータが格納されていたとします。
その場合は、以下のようになります。(_は空白をあらわす)

欄記述子 出力
A3
A B C
A4
A B C D
A7
_ _ _ A B C D

nameという変数に文字列を読み込んで、それを表示するプログラム。

C       moji2
        real name      
        READ(5,100)name
100     FORMAT(a4)
        WRITE(5,200)name
200     FORMAT('YOUR NAME:',a4)
        END

プログラムの実行例です。

D:\ftn77>moji2
taro
YOUR NAME:taro



3 文字列の代入(DATA文の使用)

さて、先ほども書きましたが、FOTRAN-77規格では、
hosi = "☆☆☆"
のように代入文で文字列を変数に格納するという技が使えません。
これもホントに不便な点なんですが、FORTRANでは、DATA文を使って、変数に文字列を指定して
あげることにより、変数に文字列を格納します。

DATA文は宣言文の後に記述し、変数に初期値を与たえる役目を果たします。
<記述例>
REAL PHI, HOSI
DATA PHI, HOSI/3.14, 4Hhosi/

DATA文の後ろに、変数名を書き、変数に格納するデータはスラッシュとスラッシュで区切った間に対応する
順番に書きます。
上の例では、PHIに3.14という実数が格納され、HOSIにhosiという文字列が格納されます。

hosiという変数に"hosi"という文字列を格納して出力するプログラム。

C       moji
        real hosi       
        DATA hosi/4Hhosi/
        WRITE(5,100)hosi
100     FORMAT(a4)
        WRITE(5,200)hosi,hosi
200     FORMAT(7HFORTRAN,A2,5HBASIC ,A6)
        END

プログラムの実行結果です。
200行目のFORMAT文では、まずH型変換で"FORTRAN"と出力し、次のA型変換はA2と2バイトのみの出力なので
"ho"のみが出力されています。
更にH型変換で"BASIC"と出力した後、次のA型変換はA6と6バイトの出力なので、余った2バイト分の空白がhosi
の左側に出力されていることを確認して下さい。

D:\ftn77>moji
hosi
FORTRANhoBASIC  hosi



4 終わりに
おじさんが大学時代の計算機センターの実習ではFORTRANを使い、また情報処理技術者試験もFORTRANを選択
しましたが、FORTRANはともかく文字の取り扱いは不便です。
文字型変数がなく、数値用の変数を転用し、実数型でもたかだか4バイトしか格納できないという時点で、めまいが
します。しかも代入文が使えず、いちいちDATA文で変数に初期値を与えなくてはならないと知って、しばらくフリーズ。
A型変換のフレキシビリティのなさに絶望という感じでしょうか。
最近のFORTRANはこの点もだいぶ改善されたようですが。

TopPage


inserted by FC2 system