![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
FORTRANについての質問です。
現在、二つのファイル(a.csv,b.csv)を読んで,a.csvのファイル内の地点番号とb.csvのファイル内の地点番号が一緒なら抜き出すというプログラムを書きたいのですが、途中で抜け出せなくなってしまいました。下に使用しているファイルの中身を、ごくわずかですが載せておきます。
b.csvのほうは、年別で33個のファイルに分けられています。
----------------------a.csv------------------------------------------
30232261977大野
31133111978増毛
31141011978新篠津
31152511978芦別
31162811978真狩
31170761978興部
-----------------------------------------------------------------------
----------------------b.csv-------------------------------------------2006,1,1,11016,141.678,45.4147,3,稚内,0,33,16,-64,-51,-75,55,1,9
2006,1,1,11151,141.138,45.1767,14,沓形,1,20,1,-52,-36,-68,4,1,6
2006,1,1,11176,141.778,45.1017,12,豊富,0,9,4,-80,-51,-116,59,0,3
2006,1,1,11206,142.362,45.1117,13,浜頓別,1,12,13,-92,-47,-140,66,1,3
2006,1,1,11276,142.28,44.965,25,中頓別,0,5,11,-137,-44,-209,46,0,2
2006,1,1,11291,142.585,44.9397,7,北見枝幸,0,25,13,-70,-47,-94,70,0,6
2006,1,1,11316,142.48,44.84,14,歌登,0,2,1,-115,-49,-170,56,0,1
------------------------------------------------------------------------
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='a.csv',status='old',iostat=ie)
do iwork=1976, 2008
write(yyyy,"(i4.4)") iwork
open(50, file='b'//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
stop
close(10)
close(50)
end
エラーメッセージがenddo文が予期されている。プログラムのファイルのendが予期されていない。とでます。enddo文を足したりしても治りませんでした。おそらくどこか書き方が違うのでしょう。どうかアドバイスください。
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ってなんだ?
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
これをどういう風に変更したらまともに動くようになるのか考えてください。
この回答への補足
すいません。気づきました。宣言文ですね。
文字列は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
ありがとうございます。
test4.csvはa.csvのことで、実は、初めの質問で表示した中身と少し違いました。すみません。
区切りにカンマが入っています。これが、いつもの書き方と違ってくるのでしょうか?
初心者の僕には、まだ見当がつきません。
No.4
- 回答日時:
そこにエラーメッセージが書いてあるので, それを読んで理解すればいい.
test4.csv なるファイルがどんなものかわからんので, 何がどうおかしいのかは自分で判断してくれ.
No.3
- 回答日時:
....
do の数をきちんと数えてください.
この回答への補足
なんとか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
というエラーが出ます。書き順などが悪いのでしょうか?
No.1
- 回答日時:
do に対応する endodo はどこ?
あと, なぜ stop のあとで close?
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が見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルVBAについて 8 2022/07/13 22:41
- その他(プログラミング・Web制作) Fortranでの出力ファイル 2 2023/03/21 21:25
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- その他(プログラミング・Web制作) python 気象データの取得 2 2023/06/20 23:54
- PHP 値の取り出し方について教えて下さい。 1 2023/03/31 13:30
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- その他(プログラミング・Web制作) データ解析ソフトRでのファイル入力read.csvがエラーになります 7 2022/03/27 22:11
- Visual Basic(VBA) VBAで特定の場所にあるCSVファイル(複数)から特定場所を抜き出してExcelに転記したいです。 11 2023/05/23 16:29
- Access(アクセス) access,vbaでフォルダ内のファイルをテーブルにインポート、ファイル名もフィールドに追加したい 1 2022/08/31 11:11
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
カンマ区切りのCSVファイルから...
-
[VBA] LOGファイル (text )か...
-
マクロから出力されるcsvのダブ...
-
csvファイル 項目数取得
-
csvファイルのデータの一部を取...
-
vb2010でCSVファイルを並び替え...
-
データ解析ソフトRでのファイル...
-
【C#】パス名で無効な文字
-
エクセルVBA 大容量CSVファイル...
-
VBAでcsvファイルを読み込んで...
-
Excelでcsvのフィールドが減る
-
FORTRANについての質問です。
-
複数のCSVファイルのAccessテー...
-
【エクセル マクロ】読み込ん...
-
COBOLでCSVをインプットにして...
-
VBSでソート&ファイル分割
-
csvファイルでの日付設定「yyyy...
-
複数のcsvファイルをExcelに一...
-
巨大なCSVの加工(指定列のみの...
-
Visual C++によるcsvファイルの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
カンマ区切りのCSVファイルから...
-
csvファイル 項目数取得
-
バッチでCSVを処理する時、空の...
-
csvファイルでの日付設定「yyyy...
-
マクロから出力されるcsvのダブ...
-
CSV形式での保存時に”文字列...
-
データ解析ソフトRでのファイル...
-
VBAでcsvファイルを読み込んで...
-
複数のcsvファイルをExcelに一...
-
COBOLでCSVをインプットにして...
-
エクセルVBA 大容量CSVファイル...
-
【C#】パス名で無効な文字
-
CSVファイル作成
-
csvファイルのデータの一部を取...
-
CSVファイルの項目行を削除...
-
EXCEL|csvで保存→開くcsvを閉じる
-
複数のCSVファイルのAccessテー...
-
巨大なCSVの加工(指定列のみの...
-
COBOL85でのCSVファ...
-
csvファイルのデータの間引きを...
おすすめ情報