FORTRAN
まだ素人で。試行錯誤行っています。
現在、アメダス(一ヶ月平均)を読み取り、必要に応じて計算するようなプログラムを作っています。しかし、アメダスはバイナリのため、それを読めるようなプログラムが必要なのですが、
===AMEDAS DATA FILE NAME OF THE MONTH (UNCOMPRESSED)
'Amd1976.01'
===INDEX FILE OF THE YEAR ===========================
'idx1976.01'
===OUT PUT FILE NAME==============================
'pre1976.01'
===SORT OF DATA, 50:presipitation, 60:wind direction, 70:wind speed, 80:insolation, 90:temperature, 67:wind direction+speed
50
==BEGIN AND END OF STATION NUMBER=====================
10000 99000
で、指定するとそのファイルのバイナリが読めるようになっています。
それで順序は、
f77 ame_M2.for → ./a.exe → g95 1976search.f90 → ./a.exe
で行っております。ame_M2.forはバイナリを読むプログラムです。1976search.f90は自分が作った、アメダスデータを必要に応じて計算をするプログラムです。ただ、これでは、1976年1月(一ヶ月分)のデータだけ呼んで計算する形なので、今、1976年1月から1999年12月までを一気に読んで計算させたいんです。どうすればよいでしょうか??今自分でも考え中なのですが、なにかアドバイス、案などありましたら教えてください。できれば、上の指定するファイルとバイナリを読むプログラムをほぼいじらないで、自分の作った計算プログラムだけで、行うことは可能なのでしょうか??
program main
integer :: day,hour(1:24)
integer :: i,j,n
open(11, file='pre1976region.csv', status = 'unknown')
open(10, file='pre1976.01', status='old')
open(10, file='pre1976.02', status='old')
do j = 1,30000000000000000
read(10,"(11x,I5,62x)", iostat=io) number
if(io < 0) exit
if (number == 53376 ) then
do i = 1,40
select case(i)
case(1:2,8,14,20,26,32,38,40)
read(10,*)
case default
read(10, "(I2,1x,3(6I3,1x),6I3)") day, hour(1:24)
where (hour(1:24) == 999) hour = 0
write(6,*) day,sum(hour)
end select
end do
end if
end do
close(10)
close(11)
end program
これが、僕が作ったプログラムでして、numberに地点番号を入力すればその地点の一月の毎日の雨の量がわかるようになっています。これをまず、20年近く読んで、たとえば東京をみたいとすると、その東京だけの20年分を見るようにしたいんです。
言葉足らずで、これを見せないと助言できないとかがありましたら、お教えください。