fortranの数値計算結果をdatファイルに出力する方法

このQ&Aのポイント
  • fortranで数値計算をしていて、長い変数名の数値を30列以上にわたってdatファイルに出力したい場合、よりスマートな方法はありますか?
  • 現在は変数名を横並びにプログラムに書き、1行あたりの文字列の制限もあるため、&記号を使用して無理やり出力しています。
  • 改善案やより効率的な方法があれば教えてください。
回答を見る
  • ベストアンサー

fortranのwrite文について

fortranで数値計算をしています。 計算結果をdatファイルに出力する際、 長い変数名の数値を30列(1列は1000行以上)以上にわたって出力したいことがあります。 現在は、それぞれの変数名を横並びにプログラムに書き、 かつ、1行あたりの文字列の制限もあるので、 &記号を使って、無理やり出力しています。 具体的には、 do i=1,1000,1 write(1000,*)aaaaaaaaaaaaaaaa(i),& &bbbbbbbbbbbbbbbb(i),& &cccccccccccccccc(i),& &dddddddddddddddd(i),& ........ end do という形です。 もっとスマートにかけないでしょうか?

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

  • ベストアンサー
  • ki073
  • ベストアンサー率77% (491/634)
回答No.1

列に対して変数名が違いますので、あまり良い方法は無いと思います。 &でやらずに、適当な単位でwrite文を分けて改行しないという書き方もできます。 http://www.nag-j.co.jp/fortran/FI_18.html#AUTOTOC_18_2 二次元配列に入れて出力するという方法もありますが、各変数を二次元配列に入れ直さないといけませんので手間はあまり変わらないような気がします。 もう一つは、最初から二次元配列として宣言して、 real :: var(30,1000) integer, parameter :: aaaaaaaaaaaaaaaa = 1 integer, parameter :: bbbbbbbbbbbbbbbb = 2 のようにパラメータとし、 var(aaaaaaaaaaaaaaaa, 1)=879.0 var(bbbbbbbbbbbbbbbb, 1)=123.9 のようにするかでしょうか。

関連するQ&A

  • 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超初心者です。 test1.csvのファイルには、x,yの変数がずっと続いています。 test2.datのファイルには、a,bの変数がずっと続いています。 この2つのファイルの変数を元に、d,eの値を求め、それをtest3.csvというファイルに出力したいのです。 test1.csvとtest2.datの計算はできていたのですが、test3.csvの出力は最後の計算結果のみしか出力されていません。 多分毎回出力はしているのですが、計算を繰り返すと上書きされ消えてしまうという仕組みになっているのだと思います。 どうやったら上書きされずに、csvファイルの次の行に次のデータを入力できますか? 以下私が考えたFortran90のプログラムです。 open (10, file='test1.csv', status='old')  do   read (10, *, iostat=ios) x, y   open (11, file='test2.dat', status='old')   do    read (11, *, iostat=jos) a, b    d = x +a    e = y + b    if (jos .lt. 0) exit   enddo   open (12, file='test3.csv', status='replace')   write (12, *) x, y, a, b, d, e   close (12)   close (11)   if (ios .lt. 0) exit  enddo close (10) 本当に始めたばかりで、いまいち意味の分かっていない部分もあるのですが、問題点を指摘してくれたら助かります。 わかりにくいので、具体的に少し書くと、 test1.csvには 1,2 9,3 6,4 とデータが続くとします。 test2.datには 80,50 10,20 90,60 とデータが続くとします。 test3.datには 1,2,80,50,81,52 1,2,10,20,11,22 1,2,90,60,91,62 9,3,80,50,89,53 9,3,10,20,19,23 9,3,90,20,99,23 6,4,80,60,86,64 6,4,10,20,16,24 6,4,90,20,96,24 と出力されるようにしたいのです。 実際のデータや変数名も違いますが、プログラムの構造は同じです。 よろしくおねがいします。

  • FORTRANでファイルへの出力

    FORTRAN77で,以下のような出力をしたいのですが,どうしたらいいかわかりません.何かいい案があれば,教えてください. 繰り返し処理の途中で計算を止めても,何ステップまで計算したかを第一行目に出力したいです. ex.)繰返し終値が1000として,456ステップで計算を止めたとき, ----------出力ファイル-------------- 456ステップまで計算されています. (↑何ステップまで計算されたかを   第一行に記入したいです.) step 1,データ step 2,データ : : step 456,データ ----(簡単ですが)考えてたプログラム------- OPEN(10,○) WRITE(10,○)  ←ここを悩んでいます. DO I=1,1000 WRITE(10,○)'step',I,データ CONTINUE

  • fortranでプログラムを作りたいのですが

    今学校で、txtファイルの数値データを数式処理しているのですが、そのtxtファイル数が多く、一つ一つエクセルで開いてやるのがとても面倒くさくて(エクセルの中ではマクロで処理しているが)困ってます。  そこでfortranでプログラミングして処理しようかと思っているのですが、それに関してわからない事があります 1.fortranのopen文はどんなファイルでも開けるか? 2.またfortranで開いて、計算処理できるファイルはtxt datなどのファイルしかないのか? 3.ファイル名が1~100のように順番になっている時1~100まで順番で開いて、それぞれに計算処理出  来るようなプログラムは可能か?

  • Fortran90/95の出力方法について

    Fortran90/95の出力方法について Fortran95において,変数の値をwrite文で出力した後に改行しない方法を教えてください. 具体的には次のProgram reiを用いて質問します. program rei implicit none integer i, n read(*,*) n do i = 1, n write(*,*) i end do end このプログラムを実行させnに3を代入すると次のように表示されます. 1 2 3 しかし,私としては次のように改行せずに表示させたいのです. 1 2 3 また,諸事情により配列は使用しません. プログラムをどのように改良すればよいのでしょうか.教えてください.

  • FORTRANのプログラミングについて

    たびたび申し訳ありません。 またFORTRANに関しての質問です。 x y z 0 0 30 1 0 45 2 0 60 3 0 43 4 0 51 5 0 32 0 1 43 1 1 90 2 1 32 3 1 85 4 1 65 5 1 90 0 2 32 1 2 32 と続くファイルがあります。これをFORTRANをで書き換えて、 0 0 30 0 1 43 0 2 32 1 0 45 1 1 90 1 2 32 と続くデータにしたいのです。(これを以下目的のファイルという) 今のところ、次のようなプログラムを書き、特定のXに対しては、結果を吐き出すことに成功しています。 program dat real x1(100),h,y2(100),y1(100),z1(100) integer i,n,j,k,l,m,a(100) open(7,file='test.txt') open(9,file='af-test.dat') do i=1,100 read(7,*,end=200) x1(i),y1(i),z1(i) if(x1(i).eq.90)then write(9,*) x1(i),y1(i),z1(i) end if end do 200 close(7) close(9) end ここまではうまくいくのですが、これでは90以外の場合は出力されません。(あたりまえですが) 特定のXに限らずに例えばXを0から100まで吐き出されるような目的のファイル作るにはをどのようにしてプログラムを書けばいいかご教授ください。

  • Fortran90 初心者です

    Fortran初心者です。 「3-1=」を文字列データとして入力された式の答えを数値で出力するプログラムをつくりたいのですがよくわかりません。どなたかヒントください。御願いします。

  • FORTRAN95でハフモデルの計算をしようと思っています。

    FORTRAN95でハフモデルの計算をしようと思っています。 ハフモデルをちょっと拡張して計算を行いたく、なかなかプログラムを組めていません。 一番苦戦しているのが、配列に数字を入れる方法です。 縦5、横9からなる配列Bを定義して、(Bの左上の要素はB11とします) 1列目の2~5行目に1~4の数字を入れ, 1行目の2列目から後ろには1~9を入れて、Bを表示したいです。 ほかの要素は実数なのでBは実数型で定義します。 Bの完成イメージとしては 0 1 2 3 4 5 6 7 8 9 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 です。スペース部分はコンマですが。 プログラムを REAL,DIMENSION(5,9)::B B=0 DO I4=1,4 B(2:5,1)=I4 DO IXW=10,80,10 XWEI=REAL(IXW)/10.0 B(1,2:9)=XWEI END DO END DO DO I5=1,5 WRITE(*,100) (B(I5,J5),J5=1,9) 100 FORMAT(20(',',F3.1)) END DO STOP END こうかくと、 ,0.0,8.0,8.0,8.0,8.0,8.0,8.0,8.0,8.0, ,4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0, ,4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0, ,4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0, ,4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0, のように表示されます。DO文の対になるEND DOよりしたではDOの最後の値しか使えないようです。 しかし、WRITE文をEND DOより中に入れると5×9ではなくもっと縦長の15×9のような配列が表示されてしまいます。 どなたか教えてください。お願いします。

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

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

  • fortranのformatについて

    DO I=1,100 WRITE(*,100)I 100 FORMAT(I2) の出力は1行に1~100まで表示されますが5行に分けて1行に1~20、2行目に21~30 のように出力させるにはFORMAT文をどのように変えれば出来ますか? 1行目  2行目 1 21 . . . . . . 20 30 基本的な質問ですが宜しくお願いします。

専門家に質問してみよう