【问题标题】:Fortran can't read txt files created by another programFortran 无法读取其他程序创建的 txt 文件
【发布时间】:2018-02-12 04:53:31
【问题描述】:

当我尝试使用以下代码示例读取 txt 文件时:

double precision inp(100)
open(1,file='whatever.txt')
do i=1,100
read(1,*) inp(i)
enddo
close(1)

程序在读到句子时才结束。我尝试了其他方法来编写循环,比如

do
read(1,*) inp
enddo

但它是一样的。有趣的是,如果我用 fortran 或手写一个 txt,然后我尝试阅读它,它就可以工作!

我很绝望,请帮帮我。

【问题讨论】:

  • 您是否尝试过使用大于 10 的单位?您正在使用 1,它可能已经被标准输入或类似的东西占用。
  • 这应该被关闭,因为问题已经解决并且显然与代码无关。

标签: fortran


【解决方案1】:

这里有一些想法:

  1. 取一个 10 或更大的单元数,1 可能被默认 i/o 之类的东西取值
  2. 使用iostatiomsg 找出读取失败的原因:

    integer :: iostat
    character(len=100) :: iomsg
    
    read(unit=u, fmt=*, iostat=iostat, iomsg=iomsg) inp(i)
    if (iostat /= 0) then
        print *, "Error reading inp"
        print *, "i was ", i
        print *, "Error was: ", trim(iomsg)
    end if
    

【讨论】:

  • 最后我更改了文件的一个属性并且它可以工作,但是谢谢。
  • 我真的不提倡添加所有额外的iostat 处理代码来基本上为您提供系统默认为您提供的更漂亮的错误消息版本。
  • 即使你在正常运行时不关心添加的iostat处理,我仍然认为它对调试很有用。例如,如果没有这种处理,当它崩溃时,您将无法获得 i 的值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-04-07
  • 2013-04-05
  • 1970-01-01
  • 1970-01-01
  • 2012-02-08
  • 2022-01-12
相关资源
最近更新 更多