Fortran读取字符串数据文件时如何指定分号为分隔符?
Fortran按分号分隔读取字符串文件
Fortran标准语法里没有separator=';'这种直接指定分隔符的OPEN语句选项,但有几种实用方法可以实现按分号拆分读取字符串:
利用环境变量实现列表导向输入
部分编译器(比如gfortran、Intel Fortran)支持通过环境变量FORTRAN_FIELD_SEPARATOR修改字段分隔符。先设置这个变量为分号,再用无格式的READ语句就能自动拆分:CALL SET_ENVIRONMENT_VARIABLE('FORTRAN_FIELD_SEPARATOR', ';') OPEN(UNIT=10, FILE='data.txt', STATUS='OLD') READ(10, *) str1, str2, str3 ! 自动按分号拆分读取各字符串 CLOSE(10)注意:这个方法依赖编译器支持,不是所有Fortran编译器都兼容。
手动读取整行后拆分(兼容性最优)
要适配所有编译器,最可靠的方式是先把整行内容读入一个大字符串,再手动查找分号位置拆分:CHARACTER(LEN=256) :: line CHARACTER(LEN=64) :: str1, str2, str3 INTEGER :: pos1, pos2 OPEN(UNIT=10, FILE='data.txt', STATUS='OLD') READ(10, '(A)') line CLOSE(10) ! 提取第一个分号前的字符串 pos1 = INDEX(line, ';') str1 = line(1:pos1-1) ! 提取第二个分号前的字符串 pos2 = INDEX(line(pos1+1:), ';') + pos1 str2 = line(pos1+1:pos2-1) ! 提取剩余部分 str3 = line(pos2+1:)这种方法不受编译器限制,还能灵活处理分号位置不固定的情况。
固定长度场景用格式控制
如果每个待读取的字符串长度固定,可以配合格式控制符BN(忽略空白)来读取,不过灵活性很差,只适合字段长度严格一致的情况:OPEN(UNIT=10, FILE='data.txt', STATUS='OLD') READ(10, '(A6,BN,A6,BN,A6)') str1, str2, str3 ! 假设每个字段6个字符,分号分隔 CLOSE(10)BN的作用是跳过分号和字段之间的空白,但如果字段长度变化,这种方法就失效了。
内容的提问来源于stack exchange,提问作者user24353751
相关产品推荐
相关产品推荐

