是否可以在屏幕上打印某些内容,同时,打印的内容也会写入文件中?现在,我有这样的事情:
print *, root1, root2
open(unit=10,file='result.txt'
write(10,*), root1, root2
close(10)
Run Code Online (Sandbox Code Playgroud)
我觉得我在浪费行,让代码更长久.我实际上想要打印/写更多这些线,所以这就是为什么我正在寻找一种更清洁的方法来做到这一点.
写入标准输出和写入文件是两回事,因此您总是需要单独的指令.但是您不必为您编写的每一行打开和关闭文件.
老实说,我认为这不是更多的努力:
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)
Run Code Online (Sandbox Code Playgroud)
对于每个写语句,这只比你不得不做的一行.如果您真的认为代码中有太多的write语句,可以尝试以下几个想法:
如果您在Linux或Unix系统(包括MacOS)上运行,则可以编写仅写入标准输出的程序,并将输出通过管道传输到文件中,如下所示:
$ ./my_program | tee result.txt
Run Code Online (Sandbox Code Playgroud)
这将既将数据输出到屏幕,又将其写入文件 result.txt
或者您可以将输出写入程序中的文件,并在外部"跟踪"该文件:
$ ./my_program &
$ tail -f result.txt
Run Code Online (Sandbox Code Playgroud)
我只是有另一个想法:如果你经常遇到需要将数据写入屏幕和文件的问题,可以将其放入子程序中:
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
Run Code Online (Sandbox Code Playgroud)
我将这里要写的值作为数组传递,因为这可以让您在可能要打印的变量数量方面具有更大的灵活性.另一方面,您只能使用此子例程来编写real值,对于其他人(integer,character等)或其组合,您仍需要两个write语句,或者编写其他特定的"写入两个"例程.
| 归档时间: |
|
| 查看次数: |
153 次 |
| 最近记录: |