• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:FORTRANについての質問です。)

FORTRANで二つのファイルの地点番号を抜き出すプログラムを書きたい

このQ&Aのポイント
  • FORTRANで二つのファイル(a.csv,b.csv)の地点番号を比較し、一致する場合に抜き出すプログラムを書きたいです。
  • 現在、FORTRANで二つのファイル(a.csv,b.csv)の地点番号を比較し、一致する場合に抜き出すプログラムを作成しようとしていますが、途中でエラーが発生して困っています。
  • FORTRANを使用して、a.csvファイルとb.csvファイルの地点番号を比較し、一致する場合に抜き出すプログラムを作りたいですが、エラーが発生しています。どうすれば解決できるでしょうか?

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

  • ベストアンサー
  • f272
  • ベストアンサー率46% (8467/18126)
回答No.6

> read(50,*) yea,mon,day,id,lon,lat,chiki,nam,pre,wind,winddirection,temp,& > & hightemp,lowtemp,sunlight,maxrain,maxwind > if(io < 0) exit これではファイルの最後まで読んだらエラーになるに決まってるよね。ioってなんだ?

その他の回答 (5)

  • f272
  • ベストアンサー率46% (8467/18126)
回答No.5

だいたいa.csvというファイルの中身はとてもcvsファイルだとは思えません。 とりあえず program test implicit none REAL :: number,code,year,name open(10,file='test4.csv',status='old') read(10,*) number,code,year,name write(*,*) number,code,year,name end これをどういう風に変更したらまともに動くようになるのか考えてください。

ryoji
質問者

お礼

ありがとうございます。 test4.csvはa.csvのことで、実は、初めの質問で表示した中身と少し違いました。すみません。 区切りにカンマが入っています。これが、いつもの書き方と違ってくるのでしょうか? 初心者の僕には、まだ見当がつきません。

ryoji
質問者

補足

すいません。気づきました。宣言文ですね。 文字列はcharacterなどに変えました。 ------------------------------------------------------------------------------- program test implicit none INTEGER :: number,code,year CHARACTER(2) :: name open(10,file='test4.csv',status='old') read(10,*) number,code,year,name write(6,*) number,code,year,name end ---------------------------------------------------------------------------------- 長いほうのprogramも気をつけて直したのですが、多少動きましたが、出力されたのは1976がずらっと出ただけでして、FORTRAN runtaime error: End of file というエラーになります。 どうかアドバイスください。 INTEGER :: number,code,year INTEGER :: yea,mon,day,id,chiki REAL :: lon,lat INTEGER :: pre,wind,winddirection,temp INTEGER :: hightemp,lowtemp,sunlight,maxrain,maxwind CHARACTER(4) :: yyyy CHARACTER(2) :: name,nam open(10,file='test4.csv',status='old',iostat=ie) do iwork=1976, 2008 write(yyyy,"(i4.4)") iwork open(50, file='hokkaido_daily_lonlat'//yyyy//'.csv', status='old', & & iostat=io) if (io < 0) cycle do i = 1, 99 read(10,*) number,code,year,name if(ie < 0) exit do ii = 1, 30000 read(50,*) yea,mon,day,id,lon,lat,chiki,nam,pre,wind,winddirection,temp,& & hightemp,lowtemp,sunlight,maxrain,maxwind if(io < 0) exit write(6,*) yea enddo enddo close(50) enddo close(10) end

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

そこにエラーメッセージが書いてあるので, それを読んで理解すればいい. test4.csv なるファイルがどんなものかわからんので, 何がどうおかしいのかは自分で判断してくれ.

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

.... do の数をきちんと数えてください.

ryoji
質問者

お礼

お返事が遅くなってすいません。 ん~、3つでもできませんでした。

ryoji
質問者

補足

なんとかenddo3つでコンパイルできたのですが、実行できません。 At line 22 of file chiten.f90 (Unit 10 "test4.csv") Traceback: not available, compile with -ftrace=frame or -ftrace=full Fortran runtime error: Bad real number in item 4 of list input というエラーが出ます。書き順などが悪いのでしょうか?

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

なぜ enddo を「2個」書いたのですか?

ryoji
質問者

お礼

doを2回使っているので。 ただ1個でも2個でも結果は同じでした。

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

do に対応する endodo はどこ? あと, なぜ stop のあとで close?

ryoji
質問者

お礼

enddoを2回つけてcloseしても、enddoなしでも、同じエラーメッセージなのです。 implicit none REAL :: number,code,year,name REAL :: yea,mon,day,id,chiki,nam INTEGER :: lon,lat,pre,wind,winddirection,temp INTEGER :: hightemp,lowtemp,sunlight,maxrain,maxwind open(10,file='test4.csv',status='old',iostat=ie) do iwork=1976, 2008 write(yyyy,"(i4.4)") iwork open(50, file='hokkaido_daily_lonlat'//yyyy//'.csv', status='old', & & iostat=io) if (io < 0) cycle do i = 1, 99 read(10,*) number,code,year,name if(ie < 0) exit do ii = 1, 30000 read(50,*) yea,mon,day,id,lon,lat,chiki,nam,pre,wind,winddirection,temp,& & hightemp,lowtemp,sunlight,maxrain,maxwind if(io < 0) exit write(6,*) yea enddo enddo close(10) close(50) end

関連するQ&A