我有一个要打印到stdout的数据文件。这可以在fortran中进行,而不必将数据读入数组然后打印数组吗?
由于
答案 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行)。