将CSV转换为网格二进制

时间:2017-12-13 14:54:10

标签: fortran fortran90

我正在尝试使用 gfortran 将包含三列和572行的CSV文本文件转换为网格化二进制文件(.bin)。

我已经编写了两个FORTRAN程序来实现这一目标。

问题是我的二进制文件大小最终过大(9.6GB),这是不正确的。

我怀疑我在 ascii2grd.90 中的nx和ny值是不正确的,这导致创建了坏的.bin文件。有了这么小的列表(只有572行),我期待最终的.bin更多以KB为单位,而不是GB。

temp.90

!PROGRAM TO CONVERT ASCII TO GRD 
program gridded
real lon(572),lat(572),temp(572)
open(2,file='/home/weather/data/file')
open(3,file='/home/weather/out.dat')
 do 20 i=1,572
 read(2,*)lat(i),lon(i),temp(i)
 write(3,*)temp(i)
20 continue 

stop
end

ascii2grd.f90

!PROGRAM TO CONVERT ASCII TO GRD 
program ascii2grd
parameter(nx=26,ny=22,np=1)
real u(nx,ny,np),temp1(nx,ny)

integer :: reclen
inquire(iolength=reclen)a

open(12,file='/home/weather/test.bin',&
form='unformatted',access='direct',recl=nx*ny*reclen)  
open(11,file='/home/weather/out.dat')

 do k=1,np
 read(11,*)((u(j,i,k),j=1,nx),i=1,ny)
10  continue    
 enddo

 rec=1
 do kk=1,np
 write(12,rec=irec)((u(j,i,kk),j=1,nx),i=1,ny)
 write(*,*)'Processing...'
irec=irec+1
 enddo
 write(*,*)'Finished'

stop
end

来自out.dat的示例

6.90000010    
15.1999998    
21.2999992    
999.000000    
6.50000000    
10.1000004    
999.000000    
18.0000000    
999.000000    
20.1000004    
15.6000004    
8.30000019    
9.89999962    
999.000000     

文件中的示例

-69.93500 43.90028 6.9
-69.79722 44.32056 15.2
-69.71076 43.96401 21.3
-69.68333 44.53333 999.00000
-69.55380 45.46462 6.5
-69.53333 46.61667 10.1
-69.1 44.06667 999.00000
-68.81861 44.79722 18.0
-68.69194 45.64778 999.00000
-68.36667 44.45 20.1
-68.30722 47.28500 15.6
-68.05 46.68333 8.3
-68.01333 46.86722 9.9
-67.79194 46.12306 999.00000

0 个答案:

没有答案