Я могу предложить решение, подобное этому, не причудливое, но, кажется, работает с примером:
program matrix
implicit none
integer,dimension(:),allocatable::total
integer row,io,countRows,columns,m,numElements,icol
integer mlocs(100,2),imat,countMat,countSpace,nmats
character(len=256) line
character linechar
mlocs=0;
open(12,file='matrix.txt',status='old',iostat=io)
if (io.ne.0) then
write(*,*)'error to open file'
stop
end if
!count rows
countRows=0
countMat=1;countSpace=0;
do while (1.gt.0.0)
read(12,'(a)',end=100) line
print*,trim(line)
countRows=countRows+1;countSpace=1;
if (len(trim(line)).eq.0) then
countMat=countMat+1;mlocs(countMat,1)=countRows;
elseif (len(trim(line)).gt.0) then
do icol=1,len(trim(line))
read(line(icol:icol),'(a)') linechar
if (linechar.eq.' ') then
countSpace=countSpace+1;
mlocs(countMat,2)=countSpace
endif
enddo
endif
end do
100 print*,'Number of lines is ',countRows
print*,'Number of matrices is ',countMat
nmats=countMat;
do imat=1,nmats
print*,'NUmber of elements in matrix ',imat,' is ',mlocs(imat,2:2)
enddo
close(12)
end program