我想从名为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
现在问题是A
,B
,C
,D
都等于零,即我的输出是:
result: 0
result: 0
result: 0
....
这意味着我没有从正确的行读或我犯了另一个错误。我在vim中使用选项标尺来查看这些条目所在的行,并将这些行与T一起使用。我使用制表符创建了文件Input.txt
。我的错是什么?
答案 0 :(得分:2)
两件事:
read
。首先,您通读整个文件以获取行数,但如果没有倒回,您可以在最后开始阅读 - 这意味着没有任何内容实际读入数组。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
。您的输入文件应该可以轻松自动读取。这是我从快速浏览中可以看到的内容。看看是否有帮助。