比较Fortran中的两行



我有一个包含2列的数据文件。假设:
列1(8,8,8,6,9),读作a
第2列(3,4,5,6,7),读作b
我想写一个代码,检查是a(i)=a(i+1)还是b=0

所以结果应该是列1作为a:(8,8,8,6,7),列2作为b应该是(0,0,0,6,7)

我尝试过,但失败了:

program read2cols
implicit none
integer ::ios,i,j
real a,b
open(file='8081.txt', unit=22, status='old', action='read')
do 
read(22,*,iostat=ios) a(i),b(j)
if(a(i)<a(i))b=0 
if(ios/=0) exit 
print*,a,b 
enddo
close(22)

end program read2cols

您的程序可以是这样的:

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,因为只有在读取值之后才能对其进行比较。

最新更新