主题:将数据写入二进制文件后,怎么正确地读出来?
Program PointTS
Implicit none
! Integer(kind=1)
Integer(kind=4) i, j, k, m
Real(kind=8) EETIME
Real(kind=8) EETIME_1
Integer(kind=4), Allocatable :: KSZ_Global(:,:), KSZ_Global_1(:,:)
Allocate(KSZ_Global(2,3))
Allocate(KSZ_Global_1(2,3))
EETIME = 1
k = 0
Do i = 1, 3
Do j = 1,2
KSZ_Global(j,i) = i+j+k
k = k + 1
End Do
End Do
Open (Unit=32, File="Matrix.bin", Status='Unknown')
Close(Unit=32, Status='DELETE')
Open(Unit=32,File="Matrix.bin",Status="new",Access='sequential',FORM='unformatted')
Do k = 1, 3
Write(32) EETIME
Write(32) ((KSZ_Global(i,j),j=1,3), i=1,2)
EETIME = EETIME + 1.0
KSZ_Global = KSZ_Global + 1
End Do
Close(32)
Open(Unit=32,File="Matrix.bin",Status="old",Access='stream',FORM='unformatted')
Do k = 1, 3
Inquire(32, Pos = m)
Read(32) EETIME_1
Inquire(32, Pos = m)
Write(6,*) EETIME_1
Read(32) ((KSZ_Global_1(i,j),j=1,3), i=1,2)
Inquire(32, Pos = m)
Write(6,*) ((KSZ_Global_1(i,j),j=1,3), i=1,2)
End Do
Close(32)
End Program
-----------------------------------------------------------------------------------------------
上面的代码是为了验证把双精度EETIME, 数组KSZ_Global, 写进Matrix.bin这个二进制文件后,然后再把它正确地读出来,但不知为何,读出来的第1个 EETIME_1 = 3.9525251667299724E-323,KSZ_Global_1 也与原来的 KSZ_Global 不一样,请教大家,问题出在哪儿?
Implicit none
! Integer(kind=1)
Integer(kind=4) i, j, k, m
Real(kind=8) EETIME
Real(kind=8) EETIME_1
Integer(kind=4), Allocatable :: KSZ_Global(:,:), KSZ_Global_1(:,:)
Allocate(KSZ_Global(2,3))
Allocate(KSZ_Global_1(2,3))
EETIME = 1
k = 0
Do i = 1, 3
Do j = 1,2
KSZ_Global(j,i) = i+j+k
k = k + 1
End Do
End Do
Open (Unit=32, File="Matrix.bin", Status='Unknown')
Close(Unit=32, Status='DELETE')
Open(Unit=32,File="Matrix.bin",Status="new",Access='sequential',FORM='unformatted')
Do k = 1, 3
Write(32) EETIME
Write(32) ((KSZ_Global(i,j),j=1,3), i=1,2)
EETIME = EETIME + 1.0
KSZ_Global = KSZ_Global + 1
End Do
Close(32)
Open(Unit=32,File="Matrix.bin",Status="old",Access='stream',FORM='unformatted')
Do k = 1, 3
Inquire(32, Pos = m)
Read(32) EETIME_1
Inquire(32, Pos = m)
Write(6,*) EETIME_1
Read(32) ((KSZ_Global_1(i,j),j=1,3), i=1,2)
Inquire(32, Pos = m)
Write(6,*) ((KSZ_Global_1(i,j),j=1,3), i=1,2)
End Do
Close(32)
End Program
-----------------------------------------------------------------------------------------------
上面的代码是为了验证把双精度EETIME, 数组KSZ_Global, 写进Matrix.bin这个二进制文件后,然后再把它正确地读出来,但不知为何,读出来的第1个 EETIME_1 = 3.9525251667299724E-323,KSZ_Global_1 也与原来的 KSZ_Global 不一样,请教大家,问题出在哪儿?