- ベストアンサー
Fortranで33年の平均値を導く際のエラー
- Fortranを使用して33年の平均値を導くプログラムでエラーが発生しています。
- エラーの原因は、14161が2008年まで存在しない可能性があります。
- アドバイスや修正すべき箇所があれば助かります。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
> 一度、iostat=ioをOPEN文に指定せずif (io < 0) cycleと書いたときは、同じようなエラーがでたのですが それはそうでしょう。OPEN文を実行したときのステータスをどの変数に設定すればよいのか教えてもいないのに,ioという変数を見ても仕方がありません。 > if文のなか(io < 0)でも(io /= 0)でも回りました。あまり差はないんですかね? 正常に開けたときは0になって,そうでない場合は正の整数が返ります。負の値が返るのはあなたの使っているシステムの拡張機能ではないですか?なんにせよエラーの原因に興味がないときには0であるかどうかだけを判定すれば十分です。エラーの原因を知りたければ値がどうなっているかを調べます。 > ただ、今回回ったものの全て欠損値として出力されてしまっています。 本当にファイルの中身はあるのですか?また中身があったとしてもファイルは正常に読めているのですか?そういうことを確認すべきですね。デバッガを使うとか, read(50,*,iostat=io) id,year,mon,day,lon,lat,data の次の行に print*,id,year,mon,day,lon,lat,data とでも書いて確認してください。
その他の回答 (2)
- f272
- ベストアンサー率46% (8625/18445)
うるう年であるのは以下の条件です。 if(mod(iy,4)==0) uruu=1 if(mod(iy,100)/=0) uruu=0 if(mod(iy,400)==0) uruu=1 もし1976年から2008年まで限定で良いのなら if(mod(iy,4)==0) uruu=1 だけで済みます。 エラーメッセージとして14161_temp1993.csvがないといわれています。 欠損値を除いた平均値を導きたいということなら open(50, file=''//sssss//'_temp'//yyyy//'.csv', status='old') でエラーとなった時にスキップするよう open(50, file=''//sssss//'_temp'//yyyy//'.csv', status='old', iostat=io) if(io /= 0) cycle とでもしておけばいいんじゃないかな。
お礼
ありがとうございました。 一度、iostat=ioをOPEN文に指定せず if (io < 0) cycle と書いたときは、同じようなエラーがでたのですが、今回回りました。 確かめたところ、指定しないとだめなんですね。 またif文のなか(io < 0)でも(io /= 0)でも回りました。あまり差はないんですかね? ただ、今回回ったものの全て欠損値として出力されてしまっています。 1 -99999.9 0. 2 -99999.9 0. : 365 -99999.9 0. となっています。まだ修正しなければいけないところがあるようです。 なにかアドバイスあるでしょうか?
- f272
- ベストアンサー率46% (8625/18445)
エラーの原因は分かっているようですが、どのように処理したいのでしょうか? それからdate2doyでは閏年の判定らしきものをやっているが、その判定が間違っている上に、せっかくの判定を使っていないのはどうして?
お礼
ありがとうございます。 うるう年のところ間違っていますか?どこが違いますか?確かに今回は使用しません。が、今後違う視点で見る必要が出てくるので、書いときました。先頭に!つけます。 また、今回の最終的な目標は、上にも書きましたが、「1/1、1/2…と365日分の33年の平均値を導く」ということです。欠損値があるため、欠損値を除いた平均値を導きたいのです。 どういう処理というのはどういうことでしょうか? 画面に出力されるのは、1976~1992年までしか出力されず、 write(6,*) i, temp(i), ndata(i) の部分が出力されていないんです。 このプログラムを作ったときは、14161_temp[1976-2008]が33個、ディレクトリにあった際は回ったはずなのですが。
お礼
ありがとうございました。 できました。違うチェックのためにファイルを一度違うファイルのなかに隠しておいたせいでした。 本当に助かりました。 また、おそらくFRTRANについて質問すると思いますが、もし見かえることがありましたら、ぜひご教授いただけるとうれしいです。 今回はありがとうございました。