По сути, вам нужен оператор 'write', который выяснит, находится ли записываемое значение за верхним пределом массива или нет, а затем запишет пробел, если верхний предел пересечен.Формат не может справиться с такими расследованиями.Я сомневаюсь, есть ли команда быстрого доступа к тому, что вам требуется.Один из способов сделать это - преобразовать массив в массив символов, и там, где вы выходите за рамки своего числового массива, просто оставьте его пустым.Ниже приведена реализация этой идеи.
module sub
contains
subroutine tovalue(num_array,dim,value_array)
implicit none
real*8,intent(in)::num_array(:)
integer,intent(in)::dim
character,intent(inout)::value_array*(*)(:,:)
integer::i,n
n = size(value_array,2)
do i=1,n
if (i<size(num_array)) then
write(value_array(dim,i),"(F6.1)") num_array(i)
else
write(value_array(dim,i),"(6X)")
end if
end do
end subroutine
end module
Эту подпрограмму можно использовать следующим образом:
program test
use sub
implicit none
real*8::A(10),B(12),C(15)
integer::i,n
character,allocatable::values*6(:,:)
A = (/2,1,4,1,2,4,5,7,4,9/)
B = (/5,7,4,1,5,5,4,9,6,2,1,5/)
C = (/2,4,7,5,9,6,3,2,1,4,5,8,7,4,5/)
n = MAX(size(A),size(B),size(C))
allocate(values(3,n))
call tovalue(A,1,values)
call tovalue(B,2,values)
call tovalue(C,3,values)
print"(3A6)", values(:,1:n)
end program