• ベストアンサー

fortranのデータ読み込み

fortranで下記の読み込みたいデータがあります。 j k R(j,k) L(j,k) 1 1 5 1 1 2 10 2 1 3 15 3 1 4 20 4 2 1 25 5 2 2 30 6 データが9000行あるので, do i=1,9000 read(10,*) j(i) k(i) enddo のような読み込み方だと配列が大きすぎてだめなんです。 他の方法を知っている方、教えていただけませんか。 よろしくお願いします。

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

  • ベストアンサー
  • gtx456gtx
  • ベストアンサー率18% (194/1035)
回答No.4

学校の宿題でなければ、 「配列が大きすぎてだめなんです。」は、配列ではなくデータベースを利用すれば取り扱うデータに事実上の制限はないです。 SQLiteという、無償・簡単・結構高性能なデータベースが使えますよ ^ ^

koon1
質問者

お礼

色々考えた結果、データの読み込みというよりは、計算過程でいらないデータを保持しすぎているような気がしてきました。 SQLITE...初心者なので結構未知な世界ですが、これからもプログラムは使用していくので、ぜひ利用してみたいと思います。 いろいろわかりづらくて申し訳ありませんでした。 また、よろしくお願い致します。

その他の回答 (3)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

質問をするときには, なるべく実際のものを書いてください. でないと, このように無駄なやりとりをしなければなりません. そもそもそのプログラムは何をしたいのですか? データはどのくらい保持する必要があるのですか? 「i=9000ではなくてD(j,k,l,m)にしたい」とはどういうことですか?

koon1
質問者

お礼

わかりづらい質問で申し訳ありませんでした。これからは気をつけます。 あと、もっと整理してから質問するようにします。 上記の悩みも解決致しましたので、締め切らせていただきます。 ご回答ありがとうごさいました。

koon1
質問者

補足

お手間おかけしてしまい申し訳ありません。 そもそも、やりたいのは、あるイベントが50年間に9000回起こるのですが、そのイベントで発生したものAを用いて(Aはデータとしてあります)、新たにBを計算し、2回目のイベントAに1回目で求めたBを使って、あらたなBを計算したいのです。それを繰り返します。ただし、年の一番初めだけBをある量C減らします。 なので、1イベント前のデータだけ保持していれば大丈夫です。 プログラムは長くて載せられないのですが、配列を小さくする必要があるみたいです。 今まではループを9000でまわしていて、D(i=9000,l,m)を用いてたのですが、D(j=YEAR,k=EVENT,l,m)にしたら、jは最大50でkも最大250なので、配列が小さくなるのかなと思ったのですが、今思ったら変わらないですね。。。すみません、これは忘れて下さい。。 おそらくデータをすべて保持しているからだめな気がします。 1イベント前のデータのみ残して、後は消すことをしたいのですが、どうしたらいいのでしょうか?

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

「配列が大きすぎてだめ」とは, 具体的にどういうことなんでしょうか? まさか「配列が大きすぎてだめ」とまさにそのままのエラーメッセージが出ているわけではないですよね? あと, 処理系もきちんと書いてください.

koon1
質問者

補足

説明不足ですみません。 もともとは配列D(i,l,m)だったのですが(i=9000,l,m=500でプログラムの中にこのような配列がいくつか登場します)大きすぎだったのです。 エラーメッセージは静的~が超えました、みたいなエラーでした。 そこで、i=9000ではなくて D(j,k,l,m)にしたいのです。 詳しくいうと jが年数、kがイベントの数で、j年のときにイベントが1,2,3,・・・kと増えていき、新しい年になったらまた1,2,3・・・とイベントが増えるようデータを読み込みたいのです。 ちなみに前まで使っていたiは総イベント数でした。 do j=1,year do k=1,event 処理例 x(j,k)=R(j,k)*2   end do end do みたいに使いたいです。 わかりにくかったらすみませんが、また質問してください。

  • gtx456gtx
  • ベストアンサー率18% (194/1035)
回答No.1

いまどき9,000行のデータで配列が「大きすぎてだめ」なんてないでしょう! 「普通に読んだらNGなデータをどう処理するか?」という学校の宿題でないですか?

koon1
質問者

補足

説明不足ですみません。 もともとは配列D(i,l,m)だったのですが(i=9000,l,m=500でプログラムの中にこのような配列がいくつか登場します)大きすぎだったのです。 そこで、i=9000ではなくて D(j,k,l,m)にしたいのです。 詳しくいうと jが年数、kがイベントの数で、j年のときにイベントが1,2,3,・・・kと増えていき、新しい年になったらまた1,2,3・・・とイベントが増えるようにしたいのです。 ちなみに前まで使っていたiは総イベント数でした。 わかりにくかったらすみませんが、また質問してください。