FORTRAN, как пропустить строку при чтении строк в цикле DO?

Я пытаюсь прочитать файл построчно, используя DO, и читаю, чтобы манипулировать отдельными строками. Однако я пытаюсь пропустить строку везде, где вижу что-то, что мне не нужно.

Вот что у меня есть до сих пор:

DO J=1,10000
  READ(1,'(A150)') ROW
  IF (J==A(1)+1 .AND. ROW(17:17)=='|') THEN
    WRITE(2, '(A)') ROW(1:12) // ROW(15:150)
  ELSEIF (J>A(1) .AND. J<A(2) .AND. ROW(1:1)=='#') THEN
  ! Here's where I need to skip J and go onto J+1 and then continue the DO loop from there
  END IF
END DO

Как мне это сделать?


person DSexplorer    schedule 02.08.2012    source источник
comment
Хотя оператор CYCLE вернет вас к началу цикла DO, в вашем случае CONTINUE или отсутствие кода вообще пропустит строку. Поскольку форматированный файл читается последовательно, каждый оператор READ увеличивает позицию записи на единицу. Таким образом, в вашем случае полное отсутствие каких-либо действий эффективно пропускает эту строку. Код, который вы разместили, должен делать то, что вы хотите.   -  person milancurcic    schedule 03.08.2012


Ответы (1)


Используйте 1_:

DO J=1,10000
  READ(1,'(A150)') ROW
  IF ((J==A(1)+1) .AND. (ROW(17:17).EQ.'|')) THEN
    WRITE(2, '(A)') ROW(1:12) // ROW(15:150)
  ELSEIF (J.GT.A(1) .AND. J.LT.A(2) .AND. ROW(1:1)=='#') THEN
    CYCLE
  END IF
  ! More statements here
END DO

Как указал Христо, CYCLE необходим только в том случае, если у вас есть дополнительные операторы после IF ... END IF.

person astay13    schedule 02.08.2012
comment
CYCLE в данном случае ничего не делает — в теле цикла после END IF нет других исполняемых операторов. - person Hristo Iliev; 03.08.2012
comment
@HristoIliev, правильно. Я написал это так, как будто ОП может захотеть добавить больше кода после IF ... END IF. - person astay13; 03.08.2012
comment
Вы должны поставить что-то вроде ! More statements here после END IF, чтобы было более понятно, что CYCLE необходим только в том случае, если за ним следуют операторы, которые необходимо пропустить. - person Hristo Iliev; 03.08.2012