有没有一种简单的方法从FORTRAN中读取文件并打印到stdout?

时间:2011-04-19 14:46:54

标签: file-io fortran stdout

我有一个要打印到stdout的数据文件。这可以在fortran中进行,而不必将数据读入数组然后打印数组吗?

由于

2 个答案:

答案 0 :(得分:2)

您可以打开文件以进行流访问,并在循环中一次处理一个字符,直到到达文件末尾。我不知道这对于大型数据文件有多大(高效),但是它可以让你不必定义一个长度足以容纳最长行的字符变量,这需要一个有根据的猜测。

program echostd
    use, intrinsic :: iso_fortran_env, only: iostat_end
    implicit none

    character(*), parameter :: file_name = 'data.txt'

    integer   :: lun, io_status
    character :: char

    open(newunit=lun, file=file_name, access='stream', status='old',  &
         action='read')

    print *, '--- Content of file: ' // file_name // ' ---'

    do
        read(lun, iostat=io_status) char
        if(io_status == iostat_end) exit
        if(io_status > 0) error stop '*** Error occurred while reading file. ***'
        write(*, '(a)', advance='no') char
    end do

    print *, '--- End of content of file: ' // file_name // ' ---'

    close(lun)
end program echostd

我使用了两个fortran 2008功能,但是如果你的编译器还不支持它们,它们都可以轻松完成。
一个是newunit=说明符;如果您的编译器不支持此功能,您当然可以使用预定义的单元号 另一个是error stop声明;如果需要,只需删除error部分。

答案 1 :(得分:0)

好的,我只是有点好奇你在哪里使用Fortran。

您可以将其读入循环内的字符变量。 Fortran有一个类似

的声明
read (7,*,end=10) name

你可以继续阅读,直到你达到和EOF(它会在EOF上跳到第10行)。