比较Fortran中的两行

时间:2018-12-04 11:02:48

标签: fortran do-loops read-data

我有2列的数据文件。比方说:
第1列VC1 = Table View VC2 = New VC ,将其读为(8,8,8,6,9)
第2列a,将其读为(3,4,5,6,7)
我想编写代码检查b是否a(i)=a(i+1)

因此结果应在第1列为b=0a,在第2列为(8,8,8,6,7)应该是b

我尝试过但是失败了:

(0,0,0,6,7)

1 个答案:

答案 0 :(得分:0)

您的程序可以是这样的:

program read2cols
  implicit none

  integer :: ios, i, j
  real :: a(5), b(5)
  open(file='8081.txt', unit=22, status='old', action='read')

  read(22, *, iostat = ios) a(1), b(1)
  do i = 2,5
    read(22, *, iostat = ios) a(i), b(i)
    if (ios /= 0) exit
    if (a(i-1) == a(i)) b(i-1) = 0
  end do

  print *, a, b
  close(22)

end program read2cols

输出:

   8.00000000       8.00000000       8.00000000       6.00000000       9.00000000       
   0.00000000       0.00000000       5.00000000       6.00000000       7.00000000

注意:

您将ab声明为标量,然后使用i对其进行索引,并通过将a(5), b(5)声明为数组来解决此问题。 do ..中缺少循环索引,它应显示为do i = ..。最后,条件应该为if (a(i-1) == a(i)) b(i-1) = 0,因为您只能在读取值之后才比较它。