我通常处理具有多个数据块的数据文件,重复n行数m次。
这是示例之一:
9276
4900000
AA 4 4 6260 519 8350 1571 0 0 0 0 0 0 0 0.934 0.933 0.93 0.935 0 0 0 0 0 0 3.867 0.0 1.541
BB 3 3 3388 8391 6637 0 0 0 0 0 0 0 0 0.939 0.565 0.361 0 0 0 0 0 0 0 1.913 2.0 -0.732
CC 3 2 241 694 0 0 0 0 0 0 0 0 0 0.933 0.941 0 0 0 0 0 0 0 0 1.888 2.0 -0.834
...
第一行是数据块的行总数,第二行是其他值,这两行是标题。然后是9276行。一个数据块有9278行,然后对于m个数据块,从9279行开始重复相同格式的数据块。通常,m变得非常大。
到目前为止,我使用类似f77格式的内容:
program test
parameter (nn = 20000)
integer,dimension(nn,nn) :: conn
integer,dimension(nn) :: aaa,bbb,ccc,ddd,eee
real,dimension(nn) :: fff,ggg,hhh,iii,zzz
real,dimension(nn,nn) :: bos
character*2,dimension(nn) :: elem
open (2, file = 'input.txt', status = 'old')
iframe=0
100 continue
iframe=iframe+1
read (2,15, err = 50,end= 50) nat2
read (2,15) framenum2
do i=1,nat2
read (2,42) elem(i),aaa(i),ccc(i),(conn(i,j),j=1,10),ddd(i),(bos(i,j),j=1,10),fff(i),ggg(i),zzz(i)
enddo
do something using do and if loops
write (120,15) nat2
write (120,15) framenum2
do i=1,nat
write (120,75) elem(i),test(i),result(i)
write (121,76) iframe, zzz2, iii2
enddo
goto 100
我不需要编写格式,所有格式都正确。如您所见,我的脚本读取每个数据块的数据,执行某些操作,打印它们,然后转到下一个数据块。
我很久以前就学习过fortran,而且我不太在意自己的风格,也不认为我应该学习新的风格。但是这些天我觉得我应该对新的fortran样式更加熟悉。我觉得现在学习新语言为时已晚(主要是由于时间限制),所以我认为我最好坚持使用fortran ...
无论如何,我想将其更改为f90样式。但是我不确定应该从哪里开始。如何改善这种声明,打开,读取和写入的样式,使其更高效,更快捷?有什么建议吗?我更喜欢f90风格,但是如果有任何新的fortran方式,我会感兴趣(如果它是免费软件,并且可以与f90或intel fortran一起编译)