1.FORMAT(書式付き入出力)文
データの位置制御と編集
しかし、様式の定まったデータを入力したり、画面に形式を定めて結果を出力したり、あるいは対話的に入出力をおこなう等の実行は、今までの方法だけでは不可能である。これを可能にする入出力文が、書式付入出力文である。
この入出力文においては、プログラム作成者がデータの入出力位置、データの桁数、ページ替え、データの空読みなどを指定しなければならないが、その変わりに細かい入出力が可能となる。
書式付き入出力文を用いるに当たり、プログラム作成者は一般に次の2点に配慮しなければならない。
(1)データの位置制御
データの入力に際しては、何行目のデータの何桁目の位置のデータを入力するのか、また出力に際してはディスプレイ画面の何行目の何桁目の位置に結果を出力するのか。
(2)データの編集
どのようにデータの編集をするのか。例えば、入力はデータを整数型にするのか、出力は実数型にするのか等。
このようなデータの位置制御やデータの編集の指示はFORMAT文という非実行文で与えられる。書式付き入出力文はFORMAT文に与えられた入出力の書式に従い入出力をおこなう。
書式付き入出力(FORMAT)文の例
(1)並びによる出力文の例
WRITE(6,*) 'ヨコハマ',26,-23.97 |
(2)書式付き出力文の例
WRITE(6,100) 'ヨコハマ',26,-23.97
100 FORMAT(1H0,A4,I5,F10.2) |
ヨコハマ|...26|....-23.97 |
1H0:行送り(行方向の制御位置) A4:文字型データ 'ヨコハマ'を4桁で出力 I5:整数型データ(26)を5桁で出力 F10.2:実数型データ(-23.97)を10桁で出力 |
書式付き出力文は
FORMAT文を伴っている。FORMAT文はREAD文またはWRITE文で入出力をおこなう際の書式を指定する。書式付き出力文では、並びによる出力文中の星印*が文番号100に置き換わっており、当該文番号はFORMAT文の持つ文番号と同じになっている。この文番号によって、書式付き出力文はFORMAT文と連係する。FORMAT文中に記載されている1H0,A4,I8,F10.2はそれぞれ編集記述子と呼ばれ、それらがデータの位置制御とデータの編集を行う。
書式付き入出力(FORMAT)文の一般形
書式付き入出力文の一般形を示す。
(1)入力文
READ(5,k) iolist
k FORMAT(flist) または READ(5,k,END=n ) iolist k FORMAT(flist) |
(2)出力文
WRITE(6,k) iolist
k FORMAT(flist) |
kは文番号であり、kを介して入出力文とFORMAT文が連係する。(flist)は
書式仕様と呼ばれる。入出力文はFORMAT文の持つ書式仕様に従って、データの位置制御とデータの編集をおこなう。FORMAT文は非実行文であり、PROGRAM文とEND文の間であれば、どこに記述しても構わない。READ文とWRITE文の一般形はそれぞれ4.READ文、5.WRITE文で詳述する。
データの位置制御
データを所定のカードの位置から入力し、結果を定められた位置に出力するには、行方向と列方向の位置を正しく制御しなければならない。
(1)列方向の制御
(i)書式制御
列方向の制御は、入出力の並び項目と書式仕様中の
編集記述子によって行われる。これを書式制御という。書式制御の例を例に示す。
WRITE(6,100) M,X,N,NAME
100 FORMAT(1H0,I5,F8.1,I6,A6) |
|...28|....48.3|..2863|.トウキョウ| | 5桁 | 8桁 | 6桁 | 6桁 | | M | X | N | NAME | |
まず、書式仕様中の編集記述子が左から右へ移動し、それに対応している並び項目の各要素の各データが当該編集記述子によって編集される。その時の
出力桁数は編集記述子が持つ欄の幅、例でいえばI5の5、F8.1の8等が出力欄の幅(出力桁数)である。出力位置はそれまでの出力桁数を順次累計した値+1の値が出力の先頭位置となる。例えばNAMEのデータは20桁目から出力される。なお、書式仕様中の1H0は行方向の制御であり、次項で説明する。
(ii)編集記述子
次の入出力欄の位置を、現在の位置を起点として、右にn(正整数)文字進める。
入力の場合にはデータの読み飛ばし、出力の場合には空白の挿入が可能となる。
・次のデータ並びがあったとする。
ABC,DE, 567813789.4 |
・データ並びを入力する例を示す。
CHARACTER C*3
READ(5,100) C,I,A 100 FORMAT(A3, 4X, I4, 3X, F4.1) |
入力欄 編集記述子 ABC A3 → C ,DE, 4X 読み飛ばし 5678 I4 → I 137 3X 読み飛ばし 89.4 F4.1 → A |
・上例のC,I,Aの内容を出力する
WRITE(6,100) C, I, A
100 FORMAT(1H0,5X,A3,3X,I5,3X,F4.1) |
|.....|ABC|...|.5678|...|89.4| | 5X | A3| 3X| I5 | 3X|F4.1| |
(2)行方向の制御
行方向の制御では、1つの入力文で1行のデータ、1つの出力文で1つの行を制御することが基本である。
入力
の場合、入力文の実行回数が画面入力の行数に対応する。次の例では20行のデータを読み込む。
DO 10 I=1,20
READ(5,100) (M(I,J),J=1,3) 100 FORMAT(I10,3X,I5,2X,I2) 20 CONTINUE |
出力
の場合、結果をディスプレイ画面のどこの位置に出力するかは書式仕様の最初で指示する。これを行送りの指示という。記述子 意味 |
1H1 次のページの最初の行に送る 1H0 2行送る 1H_(スペース) 1行送る 1H+ 行送りをしない |
表 行送りの編集記述子
WRITE(6,100) 'トウキョウ'
100 FORMAT(1H1,A5) WRITE(6,101) 'ヨコハマ' 101 FORMAT(1H0,A4) WRITE(6,102) ' ウラワ' 102 FORMAT(1H+,A13) |
トウキョウ ← 改ページ第1行目← 第2行目 ヨコハマ ウラワ ← 第3行目 |
表 プログラム例と出力結果
program pcture c ---- 型宣言 ---- parameter( ii=35,jj=10) dimension area(-ii:ii,-jj:jj) character*1 area c ---- 軸入力 ---- c 全体に空白 do 10 i= -ii,ii do 11 j= -jj,jj area(i,j)=' ' 11 continue 10 continue c 横軸に"−" do 12 i= -ii,ii area(i,0)='-' 12 continue c 縦軸に"I" do 13 i= -jj,jj area(0,i)='I' 13 continue c ---- 数値計算 ---- c 座標に* a1= real(ii)/2. a2= real(jj) cvalue=5./3. do 20 t=0.,2.*3.14,0.01 r1=a1*cos(2.*t) r2=a2*cos(2.*t) ix=r1*cos(t)*cvalue iy=r2*sin(t) area(ix,iy)='*' 20 continue c ---- 図形描画 ---- do 30 j=-jj,jj write(6,100) (area(i,-j),i=-ii,ii) 100 format(81a1) 30 continue c stop end |
例 方程式の軌跡を表示させる
2.OPEN文
OPEN文は、ファイルを開き、それを装置に接続する。
OPEN文の一般形
OPEN(olist) |
olistは次の指定子の並び [UNIT=]u IOSTAT=ios ERR=s FILE=fin STATUS=sta ACCESS=acc FORM=fm |
@[UNIT=]u (装置指定子) |
ファイルを接続する外部装置の番号 ※1.外部装置の番号はゼロ以上でなければならない 2.キーボードからの入力のための外部装置番号は5である 3.画面への出力のための外部装置番号は6である |
AIOSTAT=ios (入出力状態指定子) |
iosは整数型の変数または配列要素である。この指定子は装置を開いたときの状態を示すコードを得るもので、誤りがなければiosにはゼロが代入される。もし誤りがあれば処理系によって定められた正の値が代入される。 |
BERR=s (誤り指定子) |
装置を開いたときに、誤りが検出されれば、番号sの文に飛んで、そこから実行を続けることを示す。 |
CFILE=fin (ファイル指定子) |
装置uに接続したいファイルの名前を文字式finで指定する。この指定を省略したときにには、処理系で定められたファイルが接続される。 |
DSTATUS=sta |
ファイルの状態に関する指定をする。文字式staは次のいずれかである。 'NEW' :これから新しいファイルを作成する 'OLD' :既存のファイルに対して処理を開始する 'SCRATCH':プログラムで一時的に使用するファイル 'UNKNOWN':処理系で定められた状態にある ※1.この指定がないと'UNKNOWN'が想定される 2.'OLD'又は'NEW'を指定するときにはFILE指定子を書く 3.名前付きファイルに対して'SCRATCH'は指定しない |
EACCESS=acc |
ファイルの記録をアクセスする方法を指定する。Accは文字式'SEQUENTIAL'あるいは'DIRECT'である。磁気テープに代表されるように、記録を1次元に配置したものを 遂次アクセスファイル('SEQUENTIAL')という。一方、各記録に番号を付け、それを指定して記録をアクセスするファイルを直接アクセスファイル('DIRECT')という。 |
FFORM=fm |
ファイル中の各記録が書式指定に従った文字の列として構成されるのか(書式付記録)、あるいは処理系によって定められる内部表現形式に従った値の列として構成されるのか(書式なし記録)を文字式fmで指定する。 'FORMATTED' :書式付記録 'UNFORMATTED':書式なし記録 ※この指定子を省略した場合、遂次アクセスの場合には'FORMATTED'が想定される |
3.CLOSE文
CLOSE文は、装置とファイルの接続を解除し、そのあとのファイルの状態を指示する。
CLOSE(clist) |
Clistは次の指定子の並び [UNIT=]u IOSTAT=s ERR=s STATUS=sta |
@[UNIT=]u (装置指定子) |
接続解除の対象となる外部ファイルと接続する装置を指定したり、または内部ファイルを参照する。uは外部装置識別子または内部ファイル識別子である。 ※装置指定子を並びの最初に記述する場合は'UNIT='省略可 |
AIOSTAT=ios (入出力状態指定子) |
Sは整数型の変数または配列要素である。 (1)誤りが検出されず、またファイル終了条件も成立していないときにはゼロ (2)誤りが検出された場合は処理系が定めた正の整数値 (3)ファイル終了条件が検出され、誤りが検出されない場合には、処理系が定めだ負の整数値 |
BERR=s (誤り指定子) |
入力中に誤りが検出されたとき、番号sの文に飛ぶことを指定する。 |
CSTATUS=sta |
接続を解除したファイルを保存('KEEP')しておくか、消去('DELETE')するかを指定する。 |
4.READ文
READ(clist)[iolist] Clist:制御情報並び Iolist:入力並び |
Clistは次の指定子の並び [UNIT=]u [FMT=]f IOSTAT=s ERR=s END=s |
@[UNIT=]u (装置指定子) |
入力の対象となる外部ファイルと接続する装置を指定したり、または内部ファイルを参照する。uは外部装置識別子または内部ファイル識別子である。 ※装置指定子を並びの最初に記述する場合は'UNIT='省略可 |
AFMT=f (書式指定子) |
入力のときに用いる書式を指定するもので、fは書式識別子である。 ※1.書式付き記録を読み込む場合には必ず指定をする。 2.文字列'FMT='は制御情報並びの最初の項目に'UNIT='を省略して装置指定子を書き、2番目の項目に書式指定子を書くときに限って省略可能。今までのプログラムはこの規則に従い、'UNIT='と'FMT='を省略してきた。 |
BIOSTAT=ios (入出力状態指定子) |
Sは整数型の変数または配列要素である。 (1)誤りが検出されず、またファイル終了条件も成立していないときにはゼロ (2)誤りが検出された場合は処理系が定めた正の整数値 (3)ファイル終了条件が検出され、誤りが検出されない場合には、処理系が定めだ負の整数値 |
CERR=s (誤り指定子) |
入力中に誤りが検出されたとき、番号sの文に飛ぶことを指定する。 |
DEND=s (ファイル終了指定子) |
ファイルの終了条件が成立したとき、番号sの文に飛ぶことを指定する。 なお、ファイル終了条件は次のいずれかの場合に成立。 (1)遂次アクセスファイルを読んでいる最中に、ファイルの終了を示す特別な記録(ファイル終了記録)を検出した場合 (2)内部ファイルの終わりを越えて記録を読み込もうとした場合 |
5.WRITE文
WRITE(clist)[iolist] Clist:制御情報並び Iolist:出力並び |
Clistは次の指定子の並び [UNIT=]u [FMT=]f IOSTAT=s ERR=s |
@[UNIT=]u (装置指定子) |
出力の対象となる外部ファイルと接続する装置を指定したり、または内部ファイルを参照する。uは外部装置識別子または内部ファイル識別子である。 ※装置指定子を並びの最初に記述する場合は'UNIT='省略可 |
AFMT=f (書式指定子) |
出力のときに用いる書式を指定するもので、fは書式識別子である。 ※1.書式指定子を書くと 書式付記録が書き出され、ないと書式なし記録が書き出される。2.文字列'FMT='は制御情報並びの最初の項目に'UNIT='を省略して装置指定子を書き、2番目の項目に書式指定子を書くときに限って省略可能。今までのプログラムはこの規則に従い、'UNIT='と'FMT='を省略してきた。
|
BIOSTAT=ios (入出力状態指定子) |
Sは整数型の変数または配列要素である。 (1)誤りが検出されず、またファイル終了条件も成立していないときにはゼロ (2)誤りが検出された場合は処理系が定めた正の整数値 (3)ファイル終了条件が検出され、誤りが検出されない場合には、処理系が定めだ負の整数値 |
CERR=s (誤り指定子) |
出力中に誤りが検出されたとき、番号sの文に飛ぶことを指定する。 |
6.プログラム例
program maibo c ----- 型宣言 ---- parameter(ix=10,iy=2) dimension data(ix,iy) dimension name(ix) character*15 name character ans integer data c ---- データ入力 ---- i=0 10 continue i=i+1 write(6,*) ' Input Name ' read(5,100) name(i) write(6,*) ' Input SEX (1.MAN,2,WOMAN) (in I1)' read(5,101) data(i,1) write(6,*) ' Input BIRTHDAY (ex.19841001) (in I8)' read(5,102) data(i,2) 11 continue write(6,*) ' Read NEXT? (y/n)' read(5,103) ans if(ans.eq.'y') then go to 10 else if(ans.eq.'n') then ninsu=i go to 20 else go to 11 end if 100 format(a15) 101 format(i1) 102 format(i8) 103 format(a1) c ---- ファイル・オープン ---- 20 continue open(10,file='result.dat') c ---- データ出力 ---- write(10,*) ' NAME , SEX , BIRTH' do 30 i=1,ninsu if(data(i,1).eq.1) then write(10,200) name(i),(data(i,j),j=1,iy) else if(data(i,1).eq.2) then write(10,201) name(i),(data(i,j),j=1,iy) end if 30 continue c ---- ファイル・クローズ ---- close(10) 200 format(a15,',',i1,': MAN,',2x,i8) 201 format(a15,',',i1,':WOMAN,',2x,i8) c stop end |
940-2188 | 新潟県長岡市上富岡町1603-1 長岡技術科学大学 環境・建設系 | |||
環境・建設計算機実習T 一部担当 | ||||
|