• ベストアンサー

fortranのファイル操作に関する質問です.

fortranのファイル操作に関する質問です. ファイルのopen/write文で,ファイル番号を指定しますが,ファイル番号に変数を用いることはできますか? 可能な場合はどのように書けばよいのでしょうか? よろしくお願いします.

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

  • ベストアンサー
  • ultraCS
  • ベストアンサー率44% (3956/8947)
回答No.2

できます integer infile do 100 infile=10,15 open(infile,file="xxx",err=XX) 10 read(infile,end=90) xxxx goto 10 90 close(infile, err=YY) 100 continue という具合です ただ、変数を使う場合でもデバッグや可読性を考え、暗黙のファイル番号には従う方が良いでしょうね、SYSIN=5、SYSOUT=6など)。 また、クローズも明示的に行った方が良いでしょう、システムによってはOPENすれば自動的に古いのをCLOSEしますが、こういうのには頼らないで、冗長になりますが、closeやrewindは明示的に行った方が間違いの防止になります。

arinko_kz
質問者

お礼

"や//などで囲まずに,そのまま変数を入れればいいだけなのですね. ありがとうございます.

その他の回答 (1)

  • asuncion
  • ベストアンサー率33% (2126/6286)
回答No.1

integer*4 in, out in = 5 out = 6 read(in, 5000) a, b write(out, 6000) a, b

関連するQ&A

  • fortranで読み込んだ複数ファイルデータの見方

    また質問です。 character (13) :: fname do i = 1 , 3 write (fname ,"('sample_' , i2.2 , '.csv ')") , i enddo open (10 , file = fname) close (10) end fortranで連番のcsvファイルを上記のプログラムで読み込ませることはできたのですが、それぞれのファイルのデータの見方が分かりません。装置番号10でread文やwrite文を書くと最後に読み込んだファイルのデータしか見れません。どなたか教えてください。

  • FORTRAN90

    fortran90で、ファイル出力をフォーマット付きで行いたいのですが、 write(unit,****) のような文で、****の部分のフォーマット指定を マニュアルで入力するのではなく、その場に応じた形で 指定する方法はありますでしょうか? character変数の文字にフォーマット指定の文字列、例えば六つの実数を横一列に書き出す場合を想定して write(char,"(A,I1,A)")"'(",Int,"D13.5)'" とし、 write(unit,char)x,y,z,w,s,t などとするのはできませんでした。 ここでいうintの部分を自動的に変えれるようにしたいのですが 何か策はありますでしょうか? わかりにくい説明ですみませんが宜しくおねがいします。

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

    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 文の使い方がいまいちよく分かりません。

  • Fortran90/Fortran95→Fortran77

    大学の授業でFortranを使ったプログラミングを勉強しています。 以下の文が大学のPCに入っているコンパイラでは問題なくコンパイルでき実行できるのですが、家のPCだとコンパイルすることが出来ません(以下の文でエラーが出ます) 大学のPCの開発環境はFujitsu-FORTRANだと思います(^ ^; 家のPCはSalford FTN77 Personal Edition CompilerとCPad for Salford FTN77を組み合わせて使用しています なぜエラーがでるのか自分なりに考えた結果、Fortran90/Fortran95のプログラムをFortran77のコンパイラでコンパイルしているからだと思います(全くの勘違いだったら指摘して下さい) Fortran90/Fortran95の開発環境がフリーで整えばいいのですが、見つからないのでプログラムを修正したいと思います そこで、力を貸していただきたいのです 前置きが長くなりましたが、エラーが出る文は以下のところです open(8,file='freq_ex13.dat',action='write',status='replace') ここを、Fortran77のコンパイラでコンパイルできるようにアドバイスを下さい よろしくお願いします

  • fortranのファイル入出力のopen文

    fortranのファイル入出力のopen文で、パスを指定せずファイル名を指定すると、EXEのあるフォルダにそのファイルが作られますが、次の例は、サブフォルダOUTをあらかじめEXEのあるフォルダに作っておき、そこに、計算結果を判断してファイル名をvmax,timeと指定して出力した例です。この場合、サブフォルダOUTも、計算結果に応じてプログラム内で名前を指定したいのですが、できるのでしょうか。 例: open (10,file='./out/vmax.csv') open (11,file='./out/time.csv')

  • Fortranでのファイル名操作について

     Fortranを使っているものです。 プログラムで、ファイル名は文字列形式でしか付けれないと思いますが、そのファイル名をメインプログラムから何か値をもらって、それをサブルーチンでファイル名につけるということはできるのでしょうか?  例えば、iをメインプログラムで10~100まで10ずつ動かすとします。そのiの値をわかりやすくするためにファイル名に付けたいと思っていて、do文でサブルーチン中でまわしてファイル名に入れる・・・なんてことは可能でしょうか?

  • Fortranでのファイルからの読み込み

    Fortranでのファイルからの数値の読み込みについてお尋ねします。 NAGのFortran解説サイトでは以下のような説明がありました。 ----- write (10,*) ((a(i,j),i=1,3),j=1,2) ! DO 形反復を用いて配列を全体書き出す例 write (10,*) a ! 配列全体を指定。現在はこの書き方が推奨されています ----- ここで下側が推奨されるとのことですが、下側はファイルの構造と格納される配列の構造を明示せず、上側はどこに格納するのか明確になっています。上側は相手(データ構造)が変わった場合、それに応じた読み込みができるという意味で対応の幅が広いように思うのですが、どうして下側が推奨されるのでしょうか。下側は場合によっては誤解したまま進んでしまいそうですが。  

  • Fortranの変数

    Fortranの変数の取り扱いに関する質問です。 実数で宣言した変数に 33.3 という数字を読み込ませたのですが, そのまま書式を指定せずに書き込ませると 33.2999992 と表示されました。 これはなぜなのでしょうか。

  • fortranのopen文について。

    fortranのopen文のファイル名を指定するするとき、doループで名前を変えたいのですが、どのようにやればよいでしょうか? 具体的には、 do i=1,2 open(unit=10+i,file='file.dat',status='replace') とした時、unitと共にファイル名も'file1.dat'、'file2.dat'と変わるようにしたいのです。 よろしくお願いします。

  • fortranでファイルから数値を読み取ることについての質問です。

    fortranでファイルから数値を読み取ることについての質問です。 次のような内容のファイルから数値を読み取る場合: 1 2 3 4 5 6 7 8 9 これはdoループを使って do i=1,n read(1,*)a[3*(i-1)+1],a[3*(i-1)+2],a[3*(i-1)+3] end do として、行数をn=3と指定すれば読み取れますが、 行数を指定しなくてはabortします。 行数を指定せずに、最後のデータまで自動的に読むようにするには どうすれば良いでしょうか?

専門家に質問してみよう