如何在fortran77中读取不同格式的行

时间:2015-02-04 20:26:05

标签: fortran fortran77

我需要帮助。 如何阅读以下文件数据并使用Fortran 77只写第二列?

BASE 1093 Yes Yes Yes   
BASE 1094 Yes Yes Yes   
BASE 1095 Yes Yes Yes   
BASE 1096 Yes Yes Yes   
BASE 1097 Yes Yes Yes    
BASE 6081 Yes Yes Yes Yes Yes Yes                                   
BASE 6082 Yes Yes Yes Yes Yes Yes         
BASE 6083 Yes Yes Yes Yes Yes Yes  
BASE 1098 Yes Yes Yes                                         
BASE 1099 Yes Yes Yes                                  
BASE 6084 Yes Yes Yes Yes Yes Yes         
BASE 6085 Yes Yes Yes Yes Yes Yes        
BASE 6086 Yes Yes Yes Yes Yes Yes

我的代码:

DO I=1,Npoint
 READ(2,*) a1,P_LABEL(I),a2,a3,a4,a5
 write(4,*) P_LABEL(I)
 IF (a5.EQ.'Base') THEN
  READ(2,*) P_LABEL(I)
  write(4,*) P_LABEL(I)
 else 
  READ(2,*) a6,a7
  write(*,*) a6,a7
 endif
end do

2 个答案:

答案 0 :(得分:1)

在您的代码中,您在具有不同条目数的文件上使用列表导向输入(使用*作为格式)。

一般来说,这是一个坏主意。如果列表导向的输入无法在当前记录中找到它所需的条目数,则会跳到下一行(以Fortran的说法,前进到下一条记录)。

幸运的是,您的数据文件似乎是面向列的,这使得Fortran格式化的I / O变得容易。

所以,这里有一些示例代码,它与Fortran 77非常接近。我不清楚为什么人们坚持使用属于软件博物馆的语言标准,但是嘿......我只想说我没有F77编译器来测试它。但是,作为Fortran 2003的工作正常,请注意延续线,这很可能会通过在此发布它来搞砸。

顺便说一下,比较是区分大小写的,所以" BASE"和" Base"是两个不同的字符串。

      PROGRAM MAIN
      IMPLICIT CHARACTER*1 (A-Z)
      CHARACTER*4 A
      INTEGER I
      CHARACTER*3 F1, F2, F3, F4, F5,F6

      OPEN(20,FILE="1.dat")
 100  CONTINUE
        READ (20,9000, END=200) A,I,F1,F2,F3,F4,F5,F6
        PRINT *,A .EQ. "BASE", I, F1.EQ."Yes", F2.EQ."Yes",             &
     &         F3.EQ."Yes", F4.EQ."Yes", F5.EQ."Yes", F6. EQ. "Yes"
      GOTO 100
 200  CONTINUE
 9000 FORMAT (A4,1X,I4,6(1X,A3))
      END

答案 1 :(得分:0)

如果您只需要第二列,则可以执行以下操作:

 DO I=1,Npoint
     read(2,*)a1, P_LABEL(I)
     write(4,*) P_LABEL(I)
 enddo

假设a1被声明为字符串(长度> = 4)。读取将自动忽略该行的其余部分。

警告,我不认为此列表直接读取字符串是f77标准, 但是我怀疑你真的想要纯粹的f77。