2015-02-04 4 views
-3

도움이 필요합니다. 아래 파일 데이터를 읽고 Fortran 77을 사용하여 두 번째 열만 쓸 수 있습니까?fortran77에서 다른 형식의 행을 읽을 수있는 방법

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 
+0

무엇을 시도 했습니까? 우리는 숙제를 해결하지 못합니다. 문제를 해결하는 방법을 배우십시오. – mbomb007

+1

시도한 바가 무엇이고 어떻게 작동하지 않았는 지 설명하십시오. – CaptJak

+0

많은 시련을했지만 실패했습니다. 이 중 하나입니다. 질문을 수정했습니다. – aelmeliegy

답변

1

, 당신은 항목의 다양한 수의 파일에 (형식으로 * 사용) 목록 지시 입력을 사용하고 있습니다.

일반적으로 이것은 잘못된 생각입니다. 리스트 지시 입력은 현재 레코드에서 필요한 항목 수를 찾을 수 없으면 다음 행 (포트란 용어로 다음 레코드로 넘어)으로 건너 뜁니다.

데이터 파일이 열 기반으로 표시되어 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 
0

, 당신은 간단하게 수행 할 수 있습니다

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

문자열 과정 (길이> = 4)를 선언 a1 가정. 읽음은 라인의 나머지 부분을 자동으로 무시합니다.

주의해야 할 점은,이 목록의 문자열 읽기는 f77 표준 인 이라고 생각하지 않지만 어쨌든 나는 순수한 f77을 정말로 원할 것입니다.