在Fortran90中跳过文本文件中的一行

在Fortran90中跳过文本文件中的一行,fortran,fortran90,Fortran,Fortran90,我在用fortran(90)写东西。我的程序必须读取文件1,对其中的每一行执行某些操作,并将结果写入文件2。但问题是,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 第一行是文本和数字的组合。open(18,fi

我在用fortran(90)写东西。我的程序必须读取文件1,对其中的每一行执行某些操作,并将结果写入文件2。但问题是,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
第一行是文本和数字的组合。

open(18,file='m3dv.dat')
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
打开(19,file='m3dv2.dat')
read(18,*)x/在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件事情的测试 其中一个是不存在的

50
100
34
566

!!忽略行和数字之间的空格,我无法将其格式化

您已经找到了解决方案,但我只想补充一点,您甚至不需要虚拟变量,在进入循环之前只需一个空白的read语句就足够了:

open(18, file='m3dv.dat')
read(18,*)
do
    ...

其他答案是正确的,但这可以提高代码的简洁性和可读性。

我认为您的答案假设文件第一行的信息与第二行的信息类型相同。@jonsca:是的,我确实假设,除非其他人声明。不,第一行不是一个数字,但是数字和文本的组合可能最好是将顶行读入适当长度的字符数组,否则我相信会出现运行时错误(假设从第2行开始是
整数
双精度
,等等)@突然,fortran中没有“\0”,我如何才能在fortran中阅读
任何东西?第一行有几个空格分隔的字符串和数字。制作一个字符数组(LEN=100或其他)。我相信
read
应该一直读到最后。谢谢,我还没意识到这点。@osgx是的。如果你想跳过三行,写三遍。