Arrays Fortran 90从数据文件中读取字符和整数

Arrays Fortran 90从数据文件中读取字符和整数,arrays,integer,fortran,character,Arrays,Integer,Fortran,Character,好的,在我的程序中,我应该从用户那里获取数据文件的名称,然后打开它并读取内容。但是当我打开并阅读它时,所有的字符都是******,所有的整数都是0。IDK,如果是我如何读取文件或格式 该文件将包含如下内容:(其中城市数是第一个数字) 到目前为止,我的代码是这样的,在这里,我首先接受的是第一个数字,而不是每一个第一个数字。现在,我将剩下的数字存储到一个整数数组中,但我确实希望它存储到一个名为d_table的整数矩阵中,但我想不出一种方法可以在读取时立即执行 PROGRAM p4 IMPLICIT

好的,在我的程序中,我应该从用户那里获取数据文件的名称,然后打开它并读取内容。但是当我打开并阅读它时,所有的字符都是******,所有的整数都是0。IDK,如果是我如何读取文件或格式

该文件将包含如下内容:(其中城市数是第一个数字)

到目前为止,我的代码是这样的,在这里,我首先接受的是第一个数字,而不是每一个第一个数字。现在,我将剩下的数字存储到一个整数数组中,但我确实希望它存储到一个名为d_table的整数矩阵中,但我想不出一种方法可以在读取时立即执行

PROGRAM p4

IMPLICIT NONE

INTEGER :: number, status, I, J, K, permutation = 0, distance = 0, distance = 999999
CHARACTER(50) :: filename  ! Filenames longer than 50 are truncated
CHARACTER(20), DIMENSION(10) :: city
INTEGER, DIMENSION(100) :: temp
INTEGER, DIMENSION(10,10) :: d_table
INTEGER, DIMENSION(10) :: path, best_path

WRITE (*, '(1x,A)', ADVANCE="NO") "Enter filename:  "
READ *, filename

! Open the file we created and read the contents

OPEN(UNIT=15, FILE=filename, STATUS="OLD", ACTION="READ",&
     IOSTAT=status)
IF(status /= 0) THEN
    PRINT *, "ERROR, could not open file for reading."
    STOP
END IF

READ (UNIT=15, FMT = 100, IOSTAT=status) number
J = 0
K = 0
DO I = 0, number*number
    IF(I == J*number+J) THEN
        READ (UNIT=15, FMT = 200, IOSTAT=status) city(J)
        J = J + 1
    ELSE
        READ (UNIT=15, FMT = 100, IOSTAT=status) temp(K)
        K = K + 1
    END IF
END DO
K = 0
DO I = 0, number
    DO J = 0, number
        d_table(I,J) = temp(K)
        K = K + 1
    END DO
END DO
100 FORMAT(I6)
200 FORMAT (A)
END PROGRAM p4
这条线

DO I = 0, number*number
在我看来,这是不可靠的;循环将执行17次。你肯定想读5行的
number
组,每组是一个城市名称,后跟四个整数?这将是一个很好的小循环嵌套的例子,比如

do ix = 1, number
   read(15,*) city(ix)
   do jx = 1, 4
      read(15,*) d_table(ix,jx)
   end do
end do
考虑到这样一种简单的输入文件格式,不需要费心处理format语句,列表定向输入就可以了

我看不出代码所做的所有索引运算的意义,也许我遗漏了什么。

当我使用WRITE(*,“(“获取数字”,I6)”数字打印数字时,我得到了0,当我以2000格式打印城市时(A)我得到了第一个城市的空白。同样,当我用READ替换READ(UNIT=15,FMT=100,IOSTAT=status)数字时,我得到了0(15,*)数字我在整数值中获得意外字符
do ix = 1, number
   read(15,*) city(ix)
   do jx = 1, 4
      read(15,*) d_table(ix,jx)
   end do
end do