2016-12-30 98 views
0

我不明白为什么我的Fortran90程序不会写入文件了。它曾经在几个小时前工作。我没有修改那部分代码,也没有介绍一些条件,因为它不应该写入文件。在下一行,我已经把一个打印命令写在终端上应该写入文件的相同的值,并且这可以工作。无法写入Fotran90文件

open(500, file='data.dat') 
write(500,fmt='(E14.4,E14.4)') A,B !this SHOULD be printed on unit 500 
write(*, fmt='(E14.4,E14.4)') A,B ! this is printed on terminal 

我试图改变单位,但没有改变。我试图用一个新名称打开一个新文件,并在代码的其他部分写入它,甚至在刚开始变量声明之后。这似乎也不起作用。这太令人沮丧了,因为以前一切正常。发生了什么事?

+1

你说你期望会发生什么,但不会发生什么。你能详细说明吗?另外,你能给出一个展示问题的[mcve]吗?因为这是我只能猜测。但我可以问:如果在'open'语句中放置'action ='write',position ='rewind',status ='replace'',会发生什么? – francescalus

+0

当您尝试删除格式部分时会发生什么? '写(500,*)A,B' – Peaceful

+0

另一方面:这篇文章是为什么你应该总是使用版本控制系统,并提前和经常检查变化的例子。能够平分变更来隔离错误的编辑,为我节省了无数个小时和很多挫折。没有说教或者是一个混蛋了解,请考虑学习水银,GIT中,RCS - 任何版本控制系统,您可以绕到你的头。它几乎立即付清。 – arclight

回答

0

在Linux和以下程序(即您的代码复制粘贴和最小样板)下使用gfortran 5.3。

program hop 
    implicit none 

    double precision :: A, B 

    A = 1 
    B = 2 

    open(500, file='data.dat') 
    write(500,fmt='(E14.4,E14.4)') A,B !this SHOULD be printed on unit 500 
    write(*, fmt='(E14.4,E14.4)') A,B ! this is printed on terminal 

end program hop 

输出0.1000E+01 0.2000E+01在所述终端与所述文件在data.dat完全相同的内容。

程序中的写入指令是否挂起?没有看到输出可能与I/O缓冲有关。

是行为改变,如果你在写指令之后加入该行

flush(500) 

+0

此外,使用'iostat'和'iomsg'参数'open','write'等,应提供一些线索,如果有一个间歇性或外部的问题(即磁盘已满,文件权限问题,...) – arclight

0

我必须在一个循环中写入文件。现在我在添加位置='append'的循环中打开文件,并在循环结束时关闭它。就像

program pro 
implicit none 
integer (kind=2) :: i, A, B 
do i=1,10 
A=i 
b=i+1 
open(500, file='file.dat', position='append') 
write(500, *) A, B 
close(500) 
enddo 

这似乎现在的工作。

+0

为什么在每次迭代中打开和关闭?在开始时只打开一次。 –

+0

收盘不作为冲洗,如果你正在尝试的代码运行时实时查看该文件。 – agentp