How can I read the data file containing known number of lines but the number of entries in each line is unknown, e.g. if my data file contain some thing like
An implementation based on what M. S. B. pointed out. Quite late, but I guess it could be useful to someone.
Have an array of the type you expect to read ready:
double precision, dimension(MAX_NUM_OF_COLS) :: test_array
Read a line from your file:
READ(reading_unit,'(A)',iostat=io) line
Loop and try to read from the line a maximum quantity of numbers:
do i=1,MAX_NUM_OF_COLS
READ(line, *, iostat=io) test_array(1:i)
if(io==0) exit
enddo
write(*,*) 'number of columns = ', (i-1)
If needed, loop this over all the lines of your file, and keep the maximum or minimum number of columns.
Minimum example:
integer, parameter :: MAX_NUM_OF_COLS=30
integer, parameter :: MAX_LINE_LENGTH=1000
character(len=MAX_LINE_LENGTH) line
integer i, io, reading_unit
double precision, dimension(MAX_NUM_OF_COLS) :: test_array
reading_unit=100
OPEN(reading_unit, file='the_file')
! Get first line of file.
DO
READ(reading_unit,'(A)',iostat=io) line
IF (io/=0) then
write(*,*) "Error reading file."
stop
endif
exit ! Eventually, do not exit and put the DO loop below here.
ENDDO
CLOSE(reading_unit)
do i=1,MAX_NUM_OF_COLS
READ(line,*,iostat=io) test_array(1:i)
if(io==-1) exit
enddo
write(*,*) 'number of columns = ', (i-1)