【问题标题】:Fortran 90 Reading in Characters and Integers from a data fileFortran 90 从数据文件中读取字符和整数
【发布时间】:2014-10-23 05:16:00
【问题描述】:

好的,所以在我的程序中,我应该从用户那里获取数据文件的名称,而不是打开它并读取内容。但是当我打开并阅读它时,所有字符最终都是 ****** 并且所有整数最终都是 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

【问题讨论】:

    标签: arrays integer fortran character


    【解决方案1】:

    这一行

    DO I = 0, number*number
    

    对我来说看起来很奇怪;循环将执行 17 次。您肯定想阅读number 5 行组,每组是一个城市名称后跟四个整数?这对于一个小循环嵌套来说是一个很好的例子,比如

    do ix = 1, number
       read(15,*) city(ix)
       do jx = 1, 4
          read(15,*) d_table(ix,jx)
       end do
    end do
    

    鉴于这种简单的输入文件格式,无需担心格式语句,列表导向输入就可以正常工作。

    我看不到代码执行的所有索引算法的意义,也许我错过了一些东西。

    【讨论】:

    • 当我使用 WRITE (*, '("Got the number ",I6)') number 打印数字时,我得到 0,当我使用 2000 FORMAT (A) 打印城市时,我得到一个第一个城市为空白
    • 另外,当我将 READ (UNIT=15, FMT = 100, IOSTAT=status) 数字替换为 read(15,*) 数字时,我得到整数值中的意外字符
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-12
    • 2013-03-01
    • 2013-09-18
    • 1970-01-01
    • 2014-07-27
    • 2018-10-25
    • 2012-02-08
    相关资源
    最近更新 更多