- 締切済み
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まで吐き出されるような目的のファイル作るにはをどのようにしてプログラムを書けばいいかご教授ください。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- a-saitoh
- ベストアンサー率30% (524/1722)
結局あなたの説明では要領を得なくて、どういうデータ処理がしたいのか誰にもわからないので、的確な助言が得られないのです。 意味の通じない例を示すのを止めて、言葉でやりたい処理を明確に書き記してください。
- ultraCS
- ベストアンサー率44% (3956/8947)
課題がようわかりませんので まずは読んだらフィルタをかける 次にデータをソートする、最小値選択でもバブルソートでもコストとしては大差ないでしょう、勉強のためクイックソートや拡張バブルソートをしてみるのもいいかな。 学生の課題なら、読んだら、フィルタ後、挿入位置を見つけてそれ以降を一つずらして挿入なんてのでもいいと思いますよ。
- a-saitoh
- ベストアンサー率30% (524/1722)
そもそも配列に読む込む必要はないと思いますが。。。 学校の課題か何かでFORTRANで書く必要があるのでしょうか? そうでなければ、perlとかawkとかで書いてしまえば1行で済みますけど。 たとえば awk '$3>=0 && $3<=100{print$0}' 入力ファイル > 出力ファイル
- Tacosan
- ベストアンサー率23% (3656/15482)
ど~いう結果が欲しいのかよくわからんのですが, x が 80 以上 100 以下のデータが欲しいんだったら IF (80 <= x(i) .AND. x(i) <= 100) THEN なんかする ENDIF でいいんじゃないの?
- fallen_angel
- ベストアンサー率12% (287/2339)
課題の内容が解釈できていなかったら申し訳ないのですが、 ・配列をソートして後、全て出力すれば良いのではないでしょうか? ・配列を変数毎に分けていますが、 real data(100,100,100)として、ファイルから値を読み込み、ソートかければ良いと思います。 ・ソートは関数が無ければ、処理時間を考慮しないならば、バブルソートで良いでしょう。
補足
実はデータ量が大変多いので全ては出力したくなく、 ある部分だけを出力させたいのですが。 例えばデータとしてXは0から100まであるけど、 取り出したいのはXが80から90までとか ソートをかけるといことは比較的簡単なことなのでしょうか?すみません初心者なので質問の仕方がおかしいかもしれません。
補足
これだと 80 0 21 81 0 32 82 0 67 と続くのでうまくいかないです。 80 0 21 80 1 90 80 2 92 と続けたいのです。