我尝试读取文件(这里的数字相同只是为了了解文件的格式):
0.7498000E-01 0.1046400E+00 0.4006199E-01 0.1978479E+01
0.7498000E-01 0.1046400E+00 0.4006199E-01 0.1978479E+01
0.7498000E-01 0.1046400E+00 0.4006199E-01 0.1978479E+01
0.7498000E-01 0.1046400E+00 0.4006199E-01 0.1978479E+01
0.7498000E-01 0.1046400E+00 0.4006199E-01 0.1978479E+01
0.7498000E-01 0.1046400E+00 0.4006199E-01 0.1978479E+01
0.7498000E-01 0.1046400E+00 0.4006199E-01 0.1978479E+01
0.7498000E-01 0.1046400E+00 0.4006199E-01 0.1978479E+01
0.7498000E-01 0.1046400E+00 0.4006199E-01 0.1978479E+01
我的代码是以下代码:
program selection
implicit none
integer :: i,n,s,j
REAL*8,allocatable:: dum1(:),dum2(:),dum3(:),dum4(:)
open(10,file='file.txt')
n=0
DO
READ(10,*,END=100)
n=n+1
END DO
100 continue
rewind(10)
allocate(dum1(n),dum2(n),dum3(n)dum4(n))
s=0
do s=1, n
read(10,*) dum1(s),dum2(s),dum3(s),dum4(s)
end do
end program selection
问题是在阅读期间给我forrtl: severe (24): end-of-file during read
的两组不同数据之间的空格。
所以我解决了这个问题只是说代码文件有多少行,我修改代码:
program selection
implicit none
integer :: i,n,s,j
REAL*8,allocatable:: dum1(:),dum2(:),dum3(:),dum4(:)
open(10,file='file.txt')
n = 9 ! number of rows in the particular file in this example
allocate(dum1(n),dum2(n),dum3(n)dum4(n))
s=0
do s=1, n
read(10,*) dum1(s),dum2(s),dum3(s),dum4(s)
end do
end program selection
我的问题是:有没有办法修改CASE 1中的迭代过程,例如我也可以自动读取空行?
答案 0 :(得分:1)
计算非空行的最小变化。如果需要或必要,可以添加更多检查。
character(max_line_length) :: line
open(10,file='file.txt')
n=0
DO
read(10,'(a)',end=100) line
if (len_trim(line)>0) n = n + 1
END DO
100 continue
通常情况下,我更喜欢使用iostat=
停止计算任何文件结束条件或错误条件
character(max_line_length) :: line
integer :: ie
open(10,file='file.txt')
n=0
DO
read(10,'(a)',iostat=ie) line
if (ie/=0) exit
if (len_trim(line)>0) n = n + 1
END DO