【问题标题】:Starting reading from specific line numbers in Fortran从 Fortran 中的特定行号开始读取
【发布时间】:2013-05-11 07:06:31
【问题描述】:

我有一个包含 1000 多个数字的文件,例如:

0000
0032
1201
:  :
:  :
:  :
2324

根据输入参数“n”,我想从该文件中从行号“n”到“n+m-1”读取“m”个数字。

任何想法如何在 Fortran 中做到这一点?

【问题讨论】:

  • 是的,这看起来很简单。发布您的代码,我们会查看它,帮助您解决遇到的任何问题,也许会提出样式或性能改进建议。
  • 我还没有代码。我被困在这一点上。我只需要一个可以完成我上面提到的基本代码。你能提供我基本的解决方案吗?

标签: fortran


【解决方案1】:

我不知道你是否自己尝试过,但这里有一个最小的例子: 比如说,您的输入文件如下所示:

0000
0032
1201
1234
4567
7890
2324

使用此代码(阅读后)

Program jhp
Implicit None
integer :: i
integer, parameter :: &
     m=7, &    !total number of line
     n=4, &    !line to skip
     p=3      !lines to read
integer,dimension(m)::arr   !file to read

open(12,file='file_so',status='old')
do i=1,n
  read(12,*)arr(i)
end do
do i=1,p
  read(12,*)arr(i)
  write(*,*)arr(i)
end do
End Program jhp

这会跳过前 n 行,然后读取 p 行。 希望有帮助

【讨论】:

    【解决方案2】:

    可能,

    open (unit, file ...)
    do i=1,n
     read(unit,*) crap
    end do
    
    do i =n,n+m-1
     read(unit,*) whatever
    end do
    close(unit)
    

    是您正在寻找的。这是未尝过的,但可能会让你一试。

    编辑:直接访问更适合这种类型的工作: 刚刚意识到,虽然这是最简单的一种,而不是首选的一种。 您可以直接访问模式打开文件并完成您的工作:

    OPEN( unit, file, ACCESS='DIRECT', RECL=100, FORM='FORMATTED')
    
    READ( unit, *, REC=n, ERR=10 ) x
    

    【讨论】:

    • 刚刚意识到,虽然这是最简单的一种,而不是首选的一种。您可以直接访问模式打开文件并完成您的工作: OPEN(unit, file, ACCESS='DIRECT', RECL=100, & FORM='FORMATTED', ERR=90 ) READ( 2, FMT='( I10,F10.3)', REC=13, ERR=30 ) A, B​​span>
    • @Rurda -- 如果数字确实都是 4 位数字并且您设置了 recl = 5(为 CR 添加一个),则只能使用直接访问。你也不能使用*,你需要一个明确的格式
    • @george,是的……对不起!我刚刚编辑了一个顺序文件打开/读取语句并错过了那一点。
    猜你喜欢
    • 2013-06-06
    • 2017-04-11
    • 2016-12-18
    • 1970-01-01
    • 2015-08-27
    • 1970-01-01
    • 1970-01-01
    • 2012-03-10
    相关资源
    最近更新 更多