FORTRAN无格式输出

时间:2016-06-14 20:18:06

标签: binary fortran

我已在此处发布,但现在我已更改了我的代码

program v10

implicit none

real :: xmin,xmax,ymin,ymax,zmin,zmax,size
integer :: nx,ny,nz,i,j,nodestotal,irec
real,dimension(15025)    :: v
integer,dimension(15025) :: v1

open(unit=34, file='for.header', status='old')
read(34,115) xmin,xmax,ymin,ymax,zmin,zmax,size,nx,ny,nz
115   format(7f10.3,3i10)

open(unit=35, file='vel.txt', status='unknown')
read(35,*)v
v1=nint(v)

inquire (iolength = irec) v1(1)
open (36, file="lia2", form="unformatted", access="direct", recl=2*irec)
do i=1,15025
    write(36, rec=i) v1(i)
end do

end

我在Ubuntu 16.04上使用gfortran编译。 当我转储二进制输出时,我得到了

0000000        5000           0        5000           0
*
0011300        5000           0        5350           0
0011320        5350           0        5350           0
*
0022620        5700           0        5700           0
*
0034120        5700           0        5727           0
0034140        5727           0        5727           0
*
0045440        5755           0        5755           0
*
0056740        5755           0        5783           0
0056760        5783           0        5783           0
*
0070260        5811           0        5811           0
*
0101560        5811           0        5838           0
0101600        5838           0        5838           0
*
0113100        5866           0        5866           0
*
0124400        5866           0        5894           0
0124420        5894           0        5894           0
*
0135720        5922           0        5922           0
*
0147220        5922           0        5950           0
0147240        5950           0        5950           0
*
0160540        5977           0        5977           0
*
0172040        5977           0        6005           0
0172060        6005           0        6005           0
*
0203360        6033           0        6033           0
*
0214660        6033           0        6061           0
0214700        6061           0        6061           0
*
0226200        6088           0        6088           0
*
0237500        6088           0        6116           0
0237520        6116           0        6116           0
*
0251020        6144           0        6144           0
*
0262320        6144           0        6172           0
0262340        6172           0        6172           0
*
0273640        6200           0        6200           0
*
0352600        6200           0
0352610

vel.txt被粘贴 http://pastebin.com/D1dM8e91

为什么要插入这些零?

1 个答案:

答案 0 :(得分:2)

这是因为

recl=2*irec

我无法看到2*的任何理由,它应该只是irec

说明:

inquire (iolength = irec) v1(1)

询问具有v1的一个元素的记录有多大,recl=2*irec将文件记录设置为两倍。您的记录可以包含两个数字,并且您只能写一个数字

write(36, rec=i) v1(i)