read文やwrite文で指定する書式を紹介します。
read文/write文の中で指定する
read文/write文の中で書式を指定する場合、
標準の書式を指定:read/write(ファイル番号 , *)・・・
任意の書式を指定:read/write(ファイル番号 , ‘(書式)’)・・・
上記のように指定します。
コンパイラごとの標準の書式を使用する場合は、アスタリスク “*” を指定します。一方で任意の書式を指定する場合は、書式の前後をシングルクオーテーションとカッコで囲みます。
書式の内容
書式の内容は、出力するデータの内容に合わせて指定します。
数値データを出力
整数型、実数型、指数表記のは次のようにします。
整数型:I○
実数型:F○.△
指数 :E○.△
○には全体の桁数を指定し、△には小数点以下の桁数を指定します。
実数型や指数表記の場合、全体の桁数はマイナス符号や小数点も含めたものとなります。
例えば、10.234の場合、全体の桁数は6で小数点以下の桁数は3となります。これを実数型で書式指定する場合は、F6.3となります。
write(*,'(F6.3)') 10.234
また‐0.123E+04の場合、全体の桁数は10で小数点以下の桁数は3となります。これを指数表記で指定する場合は、E10.3となります。
write(*,'(E10.3)') -0.123E+04
書式設定の際は入力するデータの桁数に対して、書式で指定する桁数が同じかそれ以上である必要があります。書式の方が桁が大きい場合は、右詰となります。
文字列を出力
文字列を指定する場合は、
文字列:a○
と指定します。○には文字数を指定します。
例えば、’aiueo’の場合は5文字となるのでa5と指定します。
write(*,'(a5)')'aiueo'
書式の設定の桁数は、入力する文字列の数と同じかそれ以上で指定します。こちらも書式の方が桁が大きい場合は、右詰となります。
異なる書式で出力
異なる書式で出力する場合は、カンマで繋げて書きます。
整数型4桁と文字列5文字を出力する場合は、
write(*,'(I4,a5)')1234,'aiueo'
のように書きます。
空白を出力
空白の指定には、x(エックス)を指定します。
空白1つの場合は、1xとなります。10個空白を入れる場合は10xとなります。
write(*,'(a5,10x,a5)')'aiueo'
同じ書式でまとめて出力
同じ書式で複数のデータを出力する場合は、同じ書式で出力するデータの数を数値や文字列の書式の前に書きます。
例えば、整数型4桁のデータを2つ出力する場合は次のように書きます。
write(*,'(2i4)')1234,5678
書式指定の注意事項
書式で指定するデータの長さ(桁数、文字数)について、注意事項は次の通りです。
《数値データ》
・書式の桁数 ≧ 出力データの桁数:右詰で表示される。
・書式の桁数< 出力データの桁数:***と表示される。
《文字列》
・書式の文字数 ≧ 出力データの文字数:右詰で表示される。
・書式の文字数< 出力データの文字数:書式で指定した文字数だけ出力データの左側から出力される。
例えば、下記の内容でコードを実行した場合の結果は次の通りです。
program test
write(*,'(i5)')1234
write(*,'(i4)')1234
write(*,'(i3)')1234
write(*,'(a6)')'aiueo'
write(*,'(a5)')'aiueo'
write(*,'(a3)')'aiueo'
stop
end
数値データの場合、書式で指定した桁数が出力データ以上であれば出力されますが、書式の桁数が出力データより少なかった場合は、書式で指定した桁数分アスタリスク”*”で出力されます。
一方、文字列の場合は書式で指定した文字数が出力データの文字数以上の時は、数値データの場合と同じですが、少なかった場合は書式で指定した文字列の数だけデータが出力されています。
read文/write文の外で指定する(Format文を利用する)
Format文を利用することで、同じ書式を使いまわして利用できます。また、read文/write文の外で書式を指定できるのでコードがすっきりします。
format文を利用する場合はread文/write文で書式を指定する位置に行番号を指定します。そして文頭に行番号を記入し、その後ろに書式を記入します。
write(*,100) 1234
100 format('data=',2x,i5)
以上です。
Fortranに関する記事のまとめはこちら
コメント