如何将 .csv 中的混合数据作为字符串、整数和实数读入 Fortran
How to read in mixed data from a .csv into Fortran as string, integer, and real
我有一个子程序,用于读取 CSV 文件并最终将其保存到数据数组中。但是,我无法让它正确读取字符串值。我可以很好地获得实数和整数值,但字符串每次都是空的。数据文件始终具有完全相同的格式 (F10.6,1x,I3,1x,A64),但行数未知。我的输出只是浮点值,然后是整数,然后是白色 space。我错过了什么?
我的数据格式为:
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
您的角色 TEXTSTR
被声明为单个角色。所以你只读取一个字符然后打印它。
也不要使用小于 10 的单位编号打开文件。尤其不要使用单元 5 和单元 6。它们几乎总是预先连接用于特殊目的。
我有一个子程序,用于读取 CSV 文件并最终将其保存到数据数组中。但是,我无法让它正确读取字符串值。我可以很好地获得实数和整数值,但字符串每次都是空的。数据文件始终具有完全相同的格式 (F10.6,1x,I3,1x,A64),但行数未知。我的输出只是浮点值,然后是整数,然后是白色 space。我错过了什么?
我的数据格式为:
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
您的角色 TEXTSTR
被声明为单个角色。所以你只读取一个字符然后打印它。
也不要使用小于 10 的单位编号打开文件。尤其不要使用单元 5 和单元 6。它们几乎总是预先连接用于特殊目的。