- ベストアンサー
fortran77で複数のファイルの読み込み方法は?
- 現在fortran77のプログラムを勉強しております。ファイルが複数あり、すべてのファイルを読み込みたいのですが、プログラムの行数が多くなってしまいます。do ループを使用して、効率的にファイルを開く方法はありますか?
- fortran77で複数のファイルを読み込みたい場合、プログラムの行数を減らすためには、do ループを使用すると効果的です。特定のパターンがある場合、ファイル名の一部を変える方法もあります。
- 例えば、ファイル名に連番が含まれる場合は、character 文を使用してファイル名の一部を変えることができます。これにより、短いプログラムで複数のファイルを読み込むことができます。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
> I変換の場合は、I3とか4I5のように表すことしかできないと理解しております。 I変換はrIw.mの形式です。 このうちrは反復数で,wは欄幅を意味します。どちらも正の整数です。 mは負でない整数で,欄の最小桁数を意味します。入力のときには無視されます。 ゼロでない最初の桁まで先行するゼロを必要な数だけ強制的に挿入します。 例えば4をI3.3で出力すれば004となりますが,I3で出力すればbb4となります。(bは空白の意味) mを省略すればm=1と解釈されます。だから0をI3.0で出力すればbbbとなりますが,I3で出力すればbb0となります。 ついでに > (本来は、装置番号が入るという風に理解しておりますので、「何となく」ですが) 外部ファイルに対しては,それと装置番号を結び付けるためにOPEN文が必要ですが,内部ファイル(文字変数など)に対してはOPENせずに直接に入出力が可能です。 また装置番号に対しては何も触れませんでしたが,5,6,7番には事前に標準入力,標準出力,標準エラーと接続されています。これらをOPEN文でファイルに割り当てることもできますが,元の接続先には再接続出来なくなるので自分のプログラムでは5,6,7番をOPENするのは避けた方が良いでしょうね。
その他の回答 (1)
- f272
- ベストアンサー率46% (8529/18257)
'C:\FORTRAN\A.txt'は''で囲まれているので文字列ですね。その中でAと書いても,それは上で宣言したAという文字列型の変数とは何の関係もありません。 多分,やりたいことはこんな感じ。 character*3 A do 100 i=1,10 WRITE(A,'(I3.3)') i*i open(i,file='C:\FORTRAN\'//A//'.txt',status='old') 100 continue
お礼
いつも初歩的な質問に対して、親切に教えていただきまして、ありがとうございます。 少し分からないところもあるため、(自分で考えても分からない場合は)「補足欄」で再度質問するかもしれませんが、よろしければ、その時またお願いいたします。
補足
すいません。どうしても分からないことがあるので、再度質問させていただきます。 open(i,file='C:\FORTRAN\'//A//'.txt',status='old') にある//A//の//は’連結演算子’と呼ばれるものであることは分かりました。 ただ WRITE(A,'(I3.3)') i*i について、質問があります。 write(*1,*2) において、 *1はどこに出力するかということなので、Aにi*iの数字が入るのは何となく分かります。 (本来は、装置番号が入るという風に理解しておりますので、「何となく」ですが) ただ、*2はformat文なので、write(*1,*2)は write(A,1000)i*i 1000 format(I3.3) と同じだと思っております。 format文の I3.3 は I 変換するための物で、i*iが整数であることを表していると思って下ります。 しかしながら、I変換の場合は、I3とか4I5のように表すことしかできないと理解しております。 そうすると、I3.3とはどういう意味なのか分かりません。 I3.3の意味を教えてください。
お礼
たびたび、ご回答誠にありがとうございます。 fortranは「初歩的なプログラムだから簡単」と言われ、勉強しておりますが、結構奥が深いんですね。 また何かある疑問が場合は、よろしくお願いします。