!:: program test_read_tsv !:: real(4) :: xct(1440,180) real(4) :: xmin, xmax, nodata real(4) :: lat(180), lon(1440) logical :: mask(1440,180) character(200) :: tag, fn_data, arg, header(2) integer(4) :: unit_data,yy,mm,dd,pos_date unit_data = 1; nodata_1 = 122.; nodata_2 = 122.; i = 0 do while (.true.) i = i + 1; if (i.gt.iargc()) exit; call getarg(i, arg) if (arg(1:2).eq.'-i') then i = i + 1; if (i.gt.iargc()) exit; call getarg(i, fn_data) elseif (arg(1:2).eq.'-9') then i = i + 1; if (i.gt.iargc()) exit; call getarg(i, arg) read (arg,*) nodata_1,nodata_2 end if end do open (unit_data,file=fn_data,action='read',status='unknown') read (unit_data,'(a)') header(1) read (unit_data,'(a)') header(2) do while (.true.) read (unit_data,'(a)') tag pos_date = index(tag,'cpt:T=',.false.) + 6 read (tag(pos_date:pos_date+9),'(i4,1x,i2,1x,i2)') yy,mm,dd; read (unit_data,*) lon do j = 1, 180 read (unit_data,*) lat(j), xct(:,j) end do mask = .false. where (xct.ne.nodata_1) mask = .true. end where n = count(mask) if (n.eq.0) then x_average = nodata_2; xmin = nodata_2; xmax = nodata_2; else x_average = sum(xct,mask)/float(n); xmin = minval(xct,mask); xmax = maxval(xct,mask); end if !:: write (*,'(i4.4,a1,i2.2,a1,i2.2,2(a,f7.2,a3,f7.2),a,i6.1,f7.2,a3,2f7.2)') & yy,'-',mm,'-',dd, & ' lon_range:',minval(lon), ' - ',maxval(lon), & ' lat_range:',minval(lat), ' - ',maxval(lat), & ' n, range, average: ',n,xmin, ' - ',xmax,x_average !:: end do end program test_read_tsv