Сравните две строки в Фортране - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть файл данных с 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

1 Ответ

0 голосов
/ 04 декабря 2018

Ваша программа может выглядеть примерно так:

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, поскольку вы можете сравнивать значение только после того, как оно прочитано.

...