我是Fortran 77的新手。我需要将给定文本文件中的数据读入两个数组,但有些行是空白的,或者在包含我需要的数据的行之前包含数据集的描述性信息阅读。我如何跳过这些线?
另外,我的代码有没有办法计算包含我在该文件中感兴趣的数据的行数?或者我是否必须手动计算它们来构建我的do循环来读取数据?
我试图在网上和Schaum的使用Fortran 77进行编程中找到示例,但是找不到任何过于具体的内容。
我需要从下面读取数据的部分文件。我需要构建一个包含每列下的条目的数组。
Data from fig. 3 in Klapdor et al., MPLA_17(2002)2409
E(keV) counts_in_bin
2031.5 5.4
2032.5 0
2033.5 0
我假设这个问题非常基本,但我现在已经和它斗争了一段时间,所以我想我会问。
答案 0 :(得分:1)
自从我查看F77代码已经很长时间了,但一般来说,如果你在DO循环中的read语句可以处理查找空行,甚至是只包含空格的记录,那么你可以编写逻辑捕获这种情况并进入休息或继续声明。我只是不记得读取是否可以智能地处理这种情况。
或者,如果您使用的是UNIX shell和coreutils,则可以使用sed删除空行,/ ^ $ / 或/ ^ * $ /在将文件发送到F77之前预处理文件
像
这样的东西$ sed infile -e'd / ^ $ /; d / ^ * $ /'> OUTFILE
答案 1 :(得分:1)
如果您知道不需要/想要阅读的行,您可以通过调用read
来推进IO,而无需输入项目。
您可以使用:
read(input-unit,*)
从输入文件中读取一行,丢弃其内容并将IO推进到下一行。
答案 2 :(得分:1)
看起来应该是这样的: -
C Initialise
integer i
character*80 t1,t2,t3
real*8 x,y
open(unit=1,file='qdata.txt')
C Read headers
read(1,100)t1
100 format(A80)
write(6,*) t1
read(1,100)t2
write(6,*) t2
read(1,100)t3
write(6,*) t3
write(6,*)
C Read data
do 10 i=1,10
read(1,*,end=99) x,y
write(6,*) x,y
10 continue
99 continue
end
所以我使用经典的格式化读取来读取标题行,然后使用自由格式来读取数字。带有星号的自由格式读取会跳过包含空白行的空白行,以便它可以执行您想要的操作,当没有更多数据时,它将转到语句99并完成。
输出如下: -
Data from fig. 3 in Klapdor et al., MPLA_17(2002)2409
E(keV) counts_in_bin
2031.5000000000000 5.4000000000000004
2032.5000000000000 0.0000000000000000
2033.5000000000000 0.0000000000000000