2017-02-07 1 views
1

CSV로 읽고 최종적으로 데이터 배열에 저장하는 서브 루틴이 있습니다. 그러나 문자열 값을 제대로 읽지 못합니다. 나는 실제 값과 정수 값을 얻을 수 있지만 문자열은 매번 비어있게된다. 데이터 파일은 항상 알 수없는 행 번호가있는 동일한 정확한 형식 (F10.6,1x, I3,1x, A64)을가집니다. 내 출력은 부동 소수점 값 다음에 정수가오고 공백이옵니다. 내가 뭘 놓치고 있니?문자열, 정수 및 실수로 .csv에서 Fortran으로 혼합 된 데이터를 읽는 방법

1.100000,100,TEST STRING              
    1.106667,100,TEST STRING              
    1.106667, 48,TEST STRING              
    1.106667, 14,TEST STRING              

그리고 내 코드는 다음과 같습니다 :

내 데이터는 형식으로되어

 SUBROUTINE GET_TRIP_DATA(FILENAME, NUMROWS) 

     CHARACTER(len=256) :: FILENAME 
     INTEGER NUMROWS, IOSTATUS, I 
     REAL TIMEVAL 
     INTEGER PERCENTVAL 
     CHARACTER TEXTSTR 

     NUMROWS = 0 
     OPEN(5,FILE=FILENAME) 
     DO 
     READ(5, *, IOSTAT=IOSTATUS) DUMMYV 
     IF(IOSTATUS .NE. 0) THEN 
      EXIT 
     ELSE 
      NUMROWS = NUMROWS + 1 
     ENDIF 
     ENDDO 

     WRITE(ITERM,*) 'NUMROWS IS: ', NUMROWS 

     REWIND(5) 

     DO I=1,NUMROWS 
     READ(5, 901, IOSTAT=IOSTATUS) TIMEVAL, PERCENTVAL, TEXTSTR 
     WRITE(ITERM,901) TIMEVAL, PERCENTVAL, TRIM(ADJUSTL(TEXTSTR)) 
     ENDDO 

     CLOSE(5) 

     RETURN 
901 FORMAT (F10.6,1x,I3,1x,A64)  
     ENDSUBROUTINE 
+0

그러면 출력은 무엇입니까? 정확한 양식을 보여줄 수 있습니까? –

답변

1

캐릭터 TEXTSTR은 하나의 문자로 선언된다. 따라서 한 문자 만 읽은 다음 인쇄하십시오.

또한 파일을 열 때 10보다 작은 장치 번호를 사용하지 마십시오. 특히 5 호기와 6 호기는 사용하지 마십시오. 거의 항상 특수 목적으로 미리 연결되어 있습니다.

+0

음, 지금은 바보 같아. 나는 선언문을'CHARACTER * 64 TEXTSTR'로 바꿨고 그것은 매력처럼 작동합니다. 나는 또한 안전을 위해 99로 단위를 변경했다. 고마워요! –

관련 문제