如何为I / 0语句定义输入行?

时间:2016-11-10 22:46:11

标签: io fortran

我想从名为Input.txt的文件中读取一些值。输入文件如下所示:

    1       2       3       4
    1       2       3       4
    1       2       3       4
    1       2       3       4
    1       2       3       4
    1       2       3       4
  ....

总共36行1,2,3和4s

然后我使用以下代码从文件中读取:

program outputtest
    implicit none
    double precision, allocatable, dimension(:) :: A,B,C,D
    integer :: counter,ii, ierror
    ierror=0
    counter=1
    open(39, action='read', name='input.txt', status='old')
    do
    read(39,100, IOSTAT=Ierror)
    100 Format(T8,I1)
    If (Ierror>0) then
            print *, 'error when reading'
            stop
    end if
    If (ierror<0) then
            print*, 'end of file reached'
            exit
    end if

    counter=counter+1
    end do
    If (.not.allocated(A)) ALLocate(A(counter))
    If (.not.allocated(b)) ALLocate(b(counter))
    If (.not.allocated(c)) ALLocate(c(counter))
    If (.not.allocated(d)) ALLocate(d(counter))
    do ii=1, counter-1
            read(39,110, IOSTAT=ierror) A(ii), B(ii), C(ii), D(ii)
            110 Format(T8, I4, T16, I4, T24, I4, T32, I4)
            If (ierror.neqv.0) exit
    end do
    close(39)
    write (*,120)  A
    write (*,120) B
    write (*,120) C
    write (*,120) D
    120 Format('result:', 1x,I2)


end program outputtest

现在问题是ABCD都等于零,即我的输出是:

result: 0
result: 0
result: 0
....

这意味着我没有从正确的行读或我犯了另一个错误。我在vim中使用选项标尺来查看这些条目所在的行,并将这些行与T一起使用。我使用制表符创建了文件Input.txt。我的错是什么?

1 个答案:

答案 0 :(得分:2)

两件事:

  1. 您在文件中没有read。首先,您通读整个文件以获取行数,但如果没有倒回,您可以在最后开始阅读 - 这意味着没有任何内容实际读入数组。
  2. 具有显式格式的
  3. fmt=*是危险的。您必须确定输入文件与格式完全匹配。在您的情况下,我建议使用@ high-performance-mark并使用class Activo < ActiveRecord::Base self.primary_key = "IdActivos" scope :ts, -> { joins('LEFT OUTER JOIN relactivos ON relactivos.IdActivos = activos.IdActivos WHERE relactivos.IdActivos IS null'))) } has_one :relactivo, class_name: "Relactivo", foreign_key: "IdActivos" end 。您的输入文件应该可以轻松自动读取。
  4. 这是我从快速浏览中可以看到的内容。看看是否有帮助。