2016-12-30 96 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