在 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 行开始是integersdouble precision等) @suddnely_me Fortan 中没有 '\0'

以上是关于在 Fortran90 中从文本文件中跳过一行的主要内容,如果未能解决你的问题,请参考以下文章

FOR /F 这是在批处理文件中跳过一行的正确方法

如何在正则表达式中匹配 \n 但从以下文本中跳过 n?

使用 CSV 文件在循环中跳过第一行(字段)? [复制]

在 Yii2 中跳过 CSV 文件的第一行

在 QtCreator 中从 Qt 调用 fortran 代码

如何用fortran 在文本文件最后写入内容