2017-02-07 1 views
1

У меня есть подпрограмма, которая должна читаться в CSV и в конечном итоге сохранять ее в массив данных. Однако я не могу заставить его правильно читать строковое значение. Я могу получить реальные и целые значения просто отлично, но строка приходит в пустое каждый раз. Файл данных всегда имеет тот же точный формат (F10.6,1x, I3,1x, A64) с неизвестным количеством строк. Мой вывод - это просто значение float, за которым следует целое число, за которым следует пробел. Что мне не хватает?Как читать в смешанных данных из .csv в Fortran как string, integer и real

Мои данные в формате:

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, чтобы быть в безопасности. Большое спасибо! –

Смежные вопросы