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

时间:2014-10-23 05:16:01

标签: arrays integer fortran character

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

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

4 
SanDiego 
0 
350 
900 
1100 
Phoenix 
350 
0 
560 
604 
Denver 
900 
560 
0 
389 
Dallas 
1100 
604 
389 
0 

到目前为止我的代码是这样的,首先我接收第一个数字而不是每个firstnumber * I + I pass应该进入字符数组城市。现在我将其余的数字存储到一个整数数组中,但是真的希望它变成一个名为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

1 个答案:

答案 0 :(得分:1)

这一行

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

鉴于这样一个简单的输入文件格式,不需要打扰格式语句,列表导向输入将正常工作。

我无法看到代码所做的所有索引算法的重点,也许我错过了一些东西。