是否可以打印東西在屏幕上,並在同一時間,正在打印什麼也寫在一個文件? 現在,我有這樣的事情:打印並寫入一行?
print *, root1, root2
open(unit=10,file='result.txt'
write(10,*), root1, root2
close(10)
我覺得我在浪費線,使代碼不再,它應該是。其實我是想打印/寫更多的線,這些,所以這就是爲什麼我在尋找一個更清潔的方式來做到這一點。
是否可以打印東西在屏幕上,並在同一時間,正在打印什麼也寫在一個文件? 現在,我有這樣的事情:打印並寫入一行?
print *, root1, root2
open(unit=10,file='result.txt'
write(10,*), root1, root2
close(10)
我覺得我在浪費線,使代碼不再,它應該是。其實我是想打印/寫更多的線,這些,所以這就是爲什麼我在尋找一個更清潔的方式來做到這一點。
寫入標準輸出和寫入文件是兩個不同的東西,所以你總是需要單獨說明。但是,您不必爲每一行編寫的文件打開和關閉文件。
老實說,我不認爲這是更艱苦的努力:
open(unit=10, file='result.txt', status='replace', form='formatted')
....
write(*, *) "Here comes the data"
write(10, *) "Here comes the data"
....
write(*, *) root1, root2
write(10, *) root1, root2
....
close(10)
這只是一條線比你將不得不每寫聲明反正做多。 如果你真的認爲你的代碼中有太多的寫入語句,這裏有一些你可能會嘗試的想法:
如果你正在Linux或Unix系統(包括MacOS)上運行,你可以編寫一個程序只寫到標準輸出和管道輸出到一個文件中,就像這樣:
$ ./my_program | tee result.txt
這都將數據輸出到屏幕上,並將其寫入到文件result.txt
或者你可以寫輸出到程序中的文件,並在外部「追蹤」文件:
$ ./my_program &
$ tail -f result.txt
我只是另一個想法:如果你真的經常有,你需要將數據寫入到屏幕和文件都問題,你可以放置到一個子程序:
program my_program
implicit none
real :: root1, root2, root3
....
open(10, 'result.txt', status='replace', form='formatted')
....
call write_output((/ root1, root2 /))
....
call write_output((/ root1, root2, root3 /))
....
call write_output((/ root1, root2 /))
....
close(10)
....
contains
subroutine write_output(a)
real, dimension(:), intent(in) :: a
write(*, *) a
write(10, *) a
end subroutine write_output
end program my_program
我將這些值作爲數組傳遞給這裏,因爲這樣可以爲您打印更多的變量提供更多的靈活性。另一方面,您只能使用此子例程來爲其他(integer
,character
等)或其組合編寫real
值,或者您需要仍然有兩個write
語句或寫入其他特定的「寫入兩個」例程。