Reading data file in Fortran with known number of lines but unknown number of entries in each line

前端 未结 5 946
孤街浪徒
孤街浪徒 2020-12-02 01:24

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

5条回答
  •  余生分开走
    2020-12-02 01:41

    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)
    

提交回复
热议问题