• ベストアンサー
  • 困ってます

fortran77で複数のファイルの読み込み

  • 質問No.6297175
  • 閲覧数1768
  • ありがとう数3
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 38% (35/91)

fortran77で複数のファイルの読み込み

現在fortran77のプログラムを勉強しております。
ファイルが複数あり、すべてのファイルを読み込みたいのですが、ファイルの数がたくさんあるため、プログラムの行数が多くなってしまいます。
do ループで次々とファイルを開くプログラムを考えているのですが、思いつきません。
どなたか考え方でもいいので、教えてください。

ちなみに私が考えたプログラムは、


open(10,file='C:\FORTRAN\100.txt',status='old')
open(11,file='C:\FORTRAN\121.txt',status='old')
open(12,file='C:\FORTRAN\144.txt',status='old')
open(13,file='C:\FORTRAN\169.txt',status='old')
open(14,file='C:\FORTRAN\196.txt',status='old')
open(15,file='C:\FORTRAN\225.txt',status='old')
・・・。

これを do ループで次々に開くことを考えると、

character*3 A(10)
do 100 i=1,10
A=i*i
open(i,file='C:\FORTRAN\A.txt',status='old')
100 continue

・・・

みたいな感じです。
' 'の中の一部だけを変えたい場合のcharacter 文の使い方がいまいちよく分かりません。

質問者が選んだベストアンサー

  • 回答No.2
  • ベストアンサー

ベストアンサー率 44% (4446/9987)

他カテゴリのカテゴリマスター
> 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するのは避けた方が良いでしょうね。
お礼コメント
tigers007

お礼率 38% (35/91)

たびたび、ご回答誠にありがとうございます。
fortranは「初歩的なプログラムだから簡単」と言われ、勉強しておりますが、結構奥が深いんですね。

また何かある疑問が場合は、よろしくお願いします。
投稿日時:2010/11/05 22:38

その他の回答 (全1件)

  • 回答No.1

ベストアンサー率 44% (4446/9987)

他カテゴリのカテゴリマスター
'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
補足コメント
tigers007

お礼率 38% (35/91)

すいません。どうしても分からないことがあるので、再度質問させていただきます。

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の意味を教えてください。
投稿日時:2010/11/05 14:54
お礼コメント
tigers007

お礼率 38% (35/91)

いつも初歩的な質問に対して、親切に教えていただきまして、ありがとうございます。
少し分からないところもあるため、(自分で考えても分からない場合は)「補足欄」で再度質問するかもしれませんが、よろしければ、その時またお願いいたします。
投稿日時:2010/11/04 22:47
結果を報告する
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,600万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A

その他の関連するQ&Aをキーワードで探す

ピックアップ

ページ先頭へ