比较Fortran中的两行
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了比较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
笔记:
你将a
和b
声明为标量,然后使用i
对它们进行索引,通过将a(5), b(5)
声明为数组来解决此问题。在do ..
中缺少循环索引,它应该读取do i = ..
。最后,条件应该是if (a(i-1) == a(i)) b(i-1) = 0
,因为你只能在读取后比较一个值。
以上是关于比较Fortran中的两行的主要内容,如果未能解决你的问题,请参考以下文章