在 Fortran90 中从文本文件中跳过一行
Posted
技术标签:
【中文标题】在 Fortran90 中从文本文件中跳过一行【英文标题】:Skip a line from text file in Fortran90 【发布时间】:2011-08-02 11:19:21 【问题描述】:我正在用 fortran (90) 编写。我的程序必须读取 file1,对它的每一行执行一些操作并将结果写入 file2。但问题是 - file1 在第一行有一些不需要的信息。
如何使用 Fortran 从输入文件中跳过一行?
代码:
open (18, file='m3dv.dat')
open (19, file='m3dv2.dat')
do
read(18,*) x
tmp = sqrt(x**2 + 1)
write(19, *) tmp
end do
第一行是文本和数字的组合。
【问题讨论】:
【参考方案1】:您已经找到了解决方案,但我只是想补充一点,您甚至不需要虚拟变量,在进入循环之前只需一个空白的读取语句就足够了:
open(18, file='m3dv.dat')
read(18,*)
do
...
其他答案是正确的,但这可以提高代码的简洁性和(从而)可读性。
【讨论】:
谢谢,我没有意识到这一点。 @osgx 是的。如果要跳过 3 行,就写三遍。【参考方案2】:在 do 循环之前执行读取操作,将第一行中的任何内容读入“虚拟”变量。
program linereadtest
implicit none
character (LEN=75) ::firstline
integer :: temp,n
!
!
!
open(18,file='linereadtest.txt')
read(18,*) firstline
do n=1,4
read(18,'(i3)') temp
write(*,*) temp
end do
stop
end program linereadtest
数据文件:
这是对 1000 件事情的测试,其中 10 其中不存在
50 100 34 566
!忽略行和数字之间的空格,我无法格式化
【讨论】:
如何在 fortran 中读取whatever
?第一行有几个空格分隔的字符串和数字。
创建一个字符数组(LEN=100,或其他)。我相信read
应该读到行尾。【参考方案3】:
open (18, file='m3dv.dat')
open (19, file='m3dv2.dat')
read(18,*) x // <---
do
read(18,*) x
tmp = sqrt(x**2 + 1)
write(19, *) tmp
end do
添加的行只是读取第一行,然后在第一次迭代时用第二行覆盖它。
【讨论】:
我认为你的假设文件第一行的信息与第二行的类型相同。 @jonsca:是的,我认为,除非其他人声称。 不,第一行不是单个数字,而是数字和文本的组合 所以你最好将第一行读入一个适当长度的字符数组,否则你会得到一个运行时错误,我相信(假设从第 2 行开始是integers
或double precision
等)
@suddnely_me Fortan 中没有 '\0'以上是关于在 Fortran90 中从文本文件中跳过一行的主要内容,如果未能解决你的问题,请参考以下文章