Fortranでファイルの内容を並べ替える方法は?

このQ&Aのポイント
  • Fortranを使用して統計物理の解析を行っていますが、出力されるファイルの形式が都合が悪いです。
  • ファイルの内容を特定の形式に変換したいが、Fortranで並び替えが可能かどうか知りたいです。
  • どうすればFortranを使ってファイルの並び替えを行うことができるでしょうか。
回答を見る
  • ベストアンサー

Fortranで出力したファイルの内容を並べ替えたいです

いま、Fortranをつかって統計物理の解析を行っています。計算結果は --- 時刻T1 AのX座標 AのY座標 AのZ座標 BのX座標 ・・・ 時刻T2 AのX座標 AのY座標 AのZ座標 BのX座標 ・・・ ・ ・ ・ --- という具合に出力されるのですが、この形式では都合が悪いことがあって --- A T1 X Y Z T2 X Y Z ・ ・ ・ B T1 X Y Z T2 X Y Z ・ ・ ・ C --- と言う感じに出力したいのですが、それぞれの物体が独立して運動するわけではないので、どうしても上の形式で一度出力してからほしい形式に変換しなればなりません。私はFortranしか使ったことがないのでできればFortranで並び替えを行いたいのですが、このようなことがFortranでできますか?また、Fortranでこのような並び替えをするにはどうすれば良いのでしょうか。御教授よろしくお願いします。

noname#70525
noname#70525

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

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

テキストファイルを読み込んで、読み込んだデータの一部を別のファイルに書き出すプログラムは作れますか? それが出来るのなら、 ・元ファイルを開く ・座標データを読み込み、Aの座標を新ファイルに書込む。 ・元ファイルを閉じる。 ・元ファイルを開く ・座標データを読み込み、Bの座標を新ファイルに書込む。 ・元ファイルを閉じる。 ・元ファイルを開く ・座標データを読み込み、Cの座標を新ファイルに書込む。 ・元ファイルを閉じる。 という処理をすれば目的のデータファイルになります。 ちなみに、私ならエクセル上に読み込んで切り貼りしちゃいます。

noname#70525
質問者

お礼

>ちなみに、私ならエクセル上に読み込んで切り貼りしちゃいます。 プログラミングに詳しい方に聞いたところ、同じ事を言われした^^; プログラミングは専門外なので、いまはプログラム上での処理はあきらめて エクセルで処理しようと思います。 ご回答ありがとうございました。

その他の回答 (1)

  • zwi
  • ベストアンサー率56% (730/1282)
回答No.1

ずいぶん前にfortranを使ったことはありますが、すっかり忘れております。 やりたい事を見る限り、いったん配列に入れて出力すれば解決する問題だと思いますが、何か問題があるのでしょうか? 下記ページに色々載っていますので参考にして下さい。 http://ocw.kyoto-u.ac.jp/jp/common/course10/resources/sec0.html

noname#70525
質問者

お礼

> ずいぶん前にfortranを使ったことはありますが、すっかり忘れております。 > やりたい事を見る限り、いったん配列に入れて出力すれば解決する問題だと思いますが、何か問題があるのでしょうか? 配列というのは x(1,1) y(1,1) z(1,1) x(2,1) x(1,2) y(1,2) ・・・ ・ ・ ・ とでもデータを入力して並び替える、と言う感じでしょうか?? データ数が多いのですが、配列の数が足りるでしょうか。。。 とりあえずやってみます。 ご回答ありがとうございました。

関連するQ&A

  • fortranのプログラム

    fortranのプログラム 現在、fortranの勉強をしております。 そこで、質問があるのですが、 ある関数f(x,y,z)の座標(x,y,z)の値がデータとして与えられているとき、 S=10+f をfortranで計算したいと考えております。 ただ、関数fは複数(f1、f2、f3)あり、次々とfに代入してSを計算したいのですが、どのようにプログラムしたらいいか思いつきません。 どなたか、ヒントだけでもいいので、教えてください。 ちなみに、私が考えたプログラムは(下のプログラムはポイントだけ書いてあります。endやその他関係ないと思われるところは省いております。) do 100 k=1,3 S=S+fk(x,y,z) continue function f1 f1(s,t,u)=・・・ return end f2(s,t,u)=・・・ return end 使用しているバージョンは、fortran77(本当は90を使っているのですが、77だけで書いています)です。

  • BLOCK構造体とFORTRAN

    fortranでプログラムを組むことになったのですが、これまでプログラムを組んだことがなかったので困っています。 gridgenで作成した.grdファイルをfortranで読み込ませることがうまくできません。 原因は、.grdのフォーマットがBLOCK構造体であるからだと考えています。 POINT構造体なら読み込めることが分かっているのですが…。 そこで質問です。 BLOCK構造体である「.grd」ファイルを読み込み、POINT構造体の「.dat」ファイルを出力するプログラムをfortranで組むにはどうしたらいいですか? BLOCK構造体とは以下の形式。 X1 X2 X3 X4 X5 …Xn Y1 Y2 Y3 Y4 Y5 … Yn Z1 Z2 Z3 Z4 Z5 … Zn POINT構造体は以下。 X1 Y1 Z1 X2 Y2 Z2 X3 Y3 Z3 X4 Y4 Z4 X5 Y5 Z5 … … … Xn Yn Zn

  • ばねの運動

    大学で基礎力学を履修しているものです。 今、重心のところを習っているんですが、次の問題がわかりません。 「自然長l、ばね定数kのばねの下端に質量m1の物体A、上端に質量m2の物体Bをとりつける。物体Bを支えた状態から静かに離して自由落下させたときの運動を考える。鉛直下向きにZ軸をとり、物体A,BのZ座標をそれぞれz1,z2とする。時刻T=0における物体Bの位置を原点とする。重力加速度の大きさをgとして次の問いに答えよ。 (1)T=0における物体の位置を求めよ (2)物体A,Bの運動方程式をそれぞれ書き下せ (3)重心座標の運動方程式を求め、これをといて重心座標を時刻Tの関数としてあらわせ (4)相対座標の運動方程式を求め、これをといて相対座標の運動方程式を時刻Tの関数として表せ という問題です。 (1)はわかるんですが、(2)、(3)、(4)がわからないです。 (2)は、考えてみたところ、m1a=m1-k(l-z1) m2a=(m1+m2)gーk(l-z1)となりました(a=d^2x/dt^2)

  • 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のCOMMONについて

     最近、FORTRANについての勉強を始めたものですが いまいち「COMMON」の意味が理解出来ません。 例えば下のようなプログラムで(簡単に書きすぎてすいません)   (Aグループ)       COMMON X         X=10   (Bグループ)       COMMON Y    (UEXTERNAL)       COMMON X. Y。     WRITE X     X=10と出力されるのでしょうか? 分る範囲でいいのでお願いします。

  • Fortranとgnuplotについて困っています

    Fortranとgnuplotについて困っています こんにちは。 現在、Fortranプログラミングでgnuplotを使用した座標出力プログラムを考えているのですが、いまいちわかりません。 中心(0,0,0),半径1の級の球面上の座標を出力するプログラムを考えています。その際 ・z>=0のときだけでよい ・gnuplotで確認できる ・Fortranのプログラムファイルでまとめる。 以上を満たすものを考えています。内容自体は基本的なことだとは思いますが、いまいち勝手がわからず困っています。 拡張子.f90でどのようなファイルを作ればいいのか教えていただければ幸いです。

  • エクセルファイルを、HTMLに出力

    エクセルファイルを各項目ごとにHTMLに出力したいのですが、 何かよいソフトや方法はないでしょうか? <tr><td class="x_01"><a href="【A1】" target="_blank">【B1】</a></td><td class="y_02">【C1】</td><td class="z_03">【D1】</td></tr> <tr><td class="x_01"><a href="【A2】" target="_blank">【B2】</a></td><td class="y_02">【C2】</td><td class="z_03">【D2】</td></tr> .... このような形式で、出力していきたいです。 とりあえず、このように自動で出力できる方法ならばどのような方法でも構いません。 どうぞよろしくおねがいします。

  • 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まで吐き出されるような目的のファイル作るにはをどのようにしてプログラムを書けばいいかご教授ください。

  • 3次元座標上の2直線の交点判定について

    座標A(x1,y1,z1)から座標B(x2,y2,z2)への線分ABと 座標C(x3,y3,z3)から座標B(x4,y4,z4)への線分CDがあり、 線分ABと線分CDが交点を持つかどうかのプログラムを作りたいです。 C言語かVBかFortranで記述され、DirectXやOpenGLのライブラリを使わない方法の サンプルソースの載っているページを教えていただけませんか? また、ご迷惑でなければソースコードを記述していただけると助かります。

  • 位置ベクトル

    xy平面の直線y=b上を物体Pがx軸負方向に速さVで移動している。以下では、x軸の正方向を向く単位ベクトルをex、y軸の正方向を向く単位ベクトルをeyとし、時刻t=0で物体Pのx座標値がx=aであったとする。 速さVが一定であるとき、時刻tにおける物体Pの位置ベクトルr(t)をexとeyを用いて表せ。 全くわかりません。 詳しい解説お願いします。

専門家に質問してみよう