Вы можете открыть файл для доступа к потоку и обрабатывать его по одному символу за раз в цикле, пока не будет достигнут конец файла.Я понятия не имею, насколько (не) эффективно это может быть для больших файлов данных, но это избавляет вас от необходимости определять символьную переменную с длиной, достаточно большой, чтобы содержать самую длинную строку, что требует обоснованного предположения.
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
, если необходимо.