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