2012-08-02 828 views
1

我正在尝试使用DO读取一行一行的文件并阅读以处理各行。但是,我试图在我看到不需要的东西的地方跳过一行。FORTRAN如何在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 

我该怎么办呢?

+4

虽然CYCLE语句会将您带回DO循环的开始部分,但对您而言,CONTINUE或根本没有代码将跳过该行。由于您按顺序读取格式化文件,因此每个READ语句会将记录位置递增1。所以,就你的情况而言,根本不采取任何行动有效地跳过了这条线。你发布的代码应该做你想做的。 – milancurcic 2012-08-03 04:58:28

回答

3

使用CYCLE

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多个语句才是必需的。

+2

'CYCLE'在这种情况下什么都不做 - 在END IF之后的循环体中没有其他可执行语句。 – 2012-08-03 08:27:10

+0

@HristoIliev,正确。我写了这个,就好像OP可能希望在“IF ... END IF”之后放置更多代码一样。 – astay13 2012-08-03 14:26:46

+1

你应该放一些'!! 'END IF'后面的'更多语句'使得它更清楚地表明'CYCLE'只在必须跳过后面的语句时才是必需的。 – 2012-08-03 14:42:35