file-io - 在一行中打印和写入?

标签 file-io fortran

是否可以在屏幕上打印一些东西,同时将打印的内容也写入文件中? 现在,我有这样的事情:

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)

这只比你在每条写语句中必须做的多一行。 如果您真的认为您的代码中有太多的 write 语句,您可以尝试以下一些想法:

如果您在 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

我将要在此处写入的值作为数组传递,因为这使您可以更灵活地选择可能要打印的变量数量。另一方面,您只能使用此子例程编写 real 值,对于其他值(integercharacter 等)或其组合,您可以仍然需要有两个 write 语句,或者编写其他特定的“写入两个”例程。

关于file-io - 在一行中打印和写入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30091152/

相关文章:

fortran - 如何在 Fortran 中创建函数?

python - 使用 Homebrew 软件为 numpy 安装 gfortran

c - 在 Fortran77 子例程中传递 C 指针

pointers - 用于 malloc 的非第一个元素的 Cray 指针

java - 如何从可运行的 jar 加载文本文件

iphone - 是否需要 "synchronizeFile"来保证 iPhone 上的文件完整性?

string - 在 Fortran 中分配字符数组

c# - mscorlib.dll : Access to the path . 中发生类型为 'System.UnauthorizedAccessException' 的未处理异常。被拒绝

Perl 在原始模式下写入内存内容

c - 每次调用函数时读取文件的下一行