- 締切済み
fortranの配列のreadについて
fortran初心者です。 研究のデータ整理を行う際に 240*21のテキストデータを読み込む必要があるのですが、 自分なりに勉強してみたのですが、fortranの計算がずっとカーソルが点滅しており いつまで経っても終わらない状態のため、 ファイルopenまではいくのですが、その中身を読み込めてないようです。 プログラムですが自分としては次のように考えました。 REAL temp DIMENSION temp(21,240) DATA temp/5040*0.00/ open(11,status='unknown',file=filename) read *,((temp(q,p),p=1,240),q=1,21) close(11) と配列を組んで考えてみたのですが…ダメでした。 おかしなところがありましたら教えてください。 よろしくお願いします。 対象のテキストデータです。 0 32.57 32.48 32.48 32.57 32.66 32.75 32.75 32.75 33.01 33.10 32.93 32.48 32.21 32.21 32.30 32.21 32.21 32.12 32.12 32.21 1 32.57 32.57 32.48 32.48 32.57 32.66 32.66 32.75 32.93 33.01 32.84 32.39 32.21 32.21 32.21 32.21 32.12 32.12 32.21 32.21 2 32.66 32.66 32.66 32.66 32.75 32.84 32.84 32.84 32.93 33.10 32.93 32.48 32.21 32.21 32.12 32.12 32.12 32.12 32.12 32.21 … 239 37.53 37.28 36.76 36.16 35.64 35.21 34.86 34.51 34.16 33.90 33.54 33.37 33.28 33.10 32.93 32.75 32.57 32.39 32.30 32.21 よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- karupyon
- ベストアンサー率80% (4/5)
現在のread文の記述方法ですと意図されているファイルからの読み込み動作はしません。 read文の変更が必要です。 read *, ...... と書きますと標準入力(キーボード)からの入力を意味することになります。 ですのでカーソルが点滅してずーと待ち状態になってしまうという事になります。 以下のように変更されてみていただくとおそらく上手く行くかと思います。 read *,((temp(q,p),p=1,240),q=1,21) を read (11,*) ((temp(q,p),p=1,240),q=1,21) に変更。 これによってOpen文でオープンしたファイルから読み込みが行われるようになります。 open(11....) read (11,*) .... close(11) というように装置番号(ここでは11)は対応していなければなりません。 ご参考になればと思います。
- f272
- ベストアンサー率46% (8529/18257)
#1です。 言ったことの意味がまったく理解されていないようです。 「read *,((temp(q,p),p=1,240),q=1,21)」でも「read *,(temp(q),q=1,5040)」でもいいけど,これは標準入力から読む文だということ。 その前に「open(11,status='unknown',file=filename)」とopenした11番のファイルとは何の関係もありません。
- f272
- ベストアンサー率46% (8529/18257)
このread文は,どのファイルから読むつもりなの? ついでに p,qは整数型にしてる? DO並びのまわし方と,データの並び方の関係はこれで良いの?
補足
回答ありがとうございます。 ご指摘を受けて直しておりました。 また、質問をする際に書き忘れておりました。 integer p,qは整数型にしています。 readするfileはtest.txtという名前で filenameのところに記載しておりました。 配列が1次元であれば大丈夫なのでしょうか。 DOの並びがおかしいと思い、 DIMENSION temp(5040) read *,(temp(q),q=1,5040)に 上の文を変えてみてもダメでした。 データの並びはこの順番で並んでいます。"_" はスペースです。 0_32.57_32.48_32.48_32.57_32.66_32.75_32.75_32.75_33.01_33.10_32.93_32.48_32.21_32.21_32.30_32.21_32.21_32.12_32.12_32.21 1_32.57_32.57_32.48_32.48_32.57_32.66_32.66_32.75_32.93_33.01_32.84_32.39_32.21_32.21_32.21_32.21_32.12_32.12_32.21_32.21 データが多いため配列を使いたいと思っています。 何か良い案ございませんでしょうか。 よろしくお願いします。