8

我正在用 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

第一行是文本和数字的组合。

4

3 回答 3

13

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

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

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

于 2011-04-11T21:16:59.837 回答
1

在将第一行中的任何内容读入“虚拟”变量的 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

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

于 2011-04-10T12:24:33.510 回答
0
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

添加的行只是读取第一行,然后在第一次迭代时用第二行覆盖它。

于 2011-04-10T12:23:53.777 回答