- ベストアンサー
FORTRANのプログラミング
FORTRANに関する質問です。 今、実験のデータ解析を行っているのですが、 データの数が多くて困っています。 プログラムで行いたいのは、データが1.txt,2.txt......100.txtとあります。 1.txtなどにはテキスト形式で、 2、4 6、8 ・・・・・・・・ などデータが入っています。 これら2×4+6×8・・・・・・・・・・ と計算を行い、それらの結果をout1.txt,out2.txt.............out100.txt と計算を行いたいのですがどのようにプログラムを組めばいいかよくわかりません。 とくにファイルの入出力に関してです。 ご解答よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
多分、ファイルを切り替えて順次処理するのがわからないのだと思いますが character*10 infile, otfile integer*4 nfile, nrec real x,y,sum do 500 nfile=1,100 write(infile,*) nfile,".txt" write(otfile,*) "out",nfile,".txt" open(10,FILE=infile,MODE="read",ERR=510) open(20,FILE=otfile,MODE="write") sum=0. nrec=0 rewind(10) (笑、今はいらないと思う) write(20,*) "input file :",infile," output file:",otfile 100 read(10,*,end=110) x,y nrec=nrec+1 write(20,*) "record:",nrec," x=",x," y=",y sum=sum+x*y go to 110 110 continue close(10) write(20,*) " sum=",sum close(20) 500 continue 510 continue stop end とこんな感じかな、OPEN文のオプションの処理系での違いや、シンタックスはチェックしてね write文でfile名を作成するところは write(infile,"(I,4H.txt)") nfile write(otfile,"(3Hout,I,4H.txt") nfile の方が確実かな あるいはnfileの桁数で分けるか、手許にテスト環境がないのでちょっと自信ない なお、fileとして5は暗黙で標準入力、6は同様に標準出力なので避けた方が賢明です。
その他の回答 (3)
- ultraCS
- ベストアンサー率44% (3956/8947)
課題だと思うので、直接プログラムは書きません、こんな流れでやってみてください。 ・FILEシーケンスでループ ・入出力FILE名を作る、write(string,*) i,".txt" ・そのファイルをオープン ・オープンできなかったら終了、open文のerr=で対応 ・和を初期化 ・入力ファイルをループで読み、積を和に積算 ・終了したら出力 ・入出力ファイルをクローズ ・FILE数だけ繰り返す こんな感じ ソースか見たいのなら、補足で要求していただければ、月曜以降に
補足
do 200 i=1,6 OPEN(5,FILE="test1.txt") sum=0 100 READ(5,*,END=110) x,y WRITE(*,*) x,y sum=sum+x*y GO TO 100 110 CONTINUE CLOSE(5) write(*,*) 'sum=',sum 200 continue END やはりファイルの入出力のやり方がうまくいきません ご解答よろしくお願いします。
- notnot
- ベストアンサー率47% (4900/10358)
行単位で、 read(*,*) A,B で読んで、 write(*,*) X で書けばよいと思います。
- system_down
- ベストアンサー率50% (10/20)
なぜFORTRANでやらないとダメなんですか? CなりPerlなりで書いた方がよっぽど楽な気がしますので、理由が無いならそっちを使った方がいいでしょう
補足
Cとかは知らないのですが、CならFORTRAN に比べて簡単にできるのですか?
お礼
ありがとうございます。 とりあえず、やってみます。