【Fortran基礎③】read文・write文での書式

Fortran

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に関する記事のまとめはこちら

コメント

タイトルとURLをコピーしました