Fortran Coder

标题: 读文件中的记录时,遇到斜杠/,就不读 [打印本页]

作者: cqflhl    时间: 2024-10-23 22:23
标题: 读文件中的记录时,遇到斜杠/,就不读
只要遇到/, 不论是数字, 还是字符串就立马中断, 后面一系列乱码附入, 不知道有没有什么解决方法

作者: fcode    时间: 2024-10-23 22:32
没有呢,我都是先当字符串读入
read(*,"(a512)") cStr
然后把 / 替换成 |
Do i = 1 , len(cStr)
  if( cStr(i:i) == '/' ) cStr(i:i) = '|'
End Do
,然后再用内部文件读取
read( cStr , * ) ....
作者: li913    时间: 2024-10-24 07:29
fortran把/作为namelist的结束标记,因此表控读取会忽略斜杠后的内容,且程序不会报错。也就是说,如果你读取3个变量,但斜杠前只有1个数据,那就只有第一个变量有数据,后两个变量不读取,因此是随机乱码。
解决方案如楼上所说。
作者: cqflhl    时间: 2024-10-24 21:51
fcode 发表于 2024-10-23 22:32
没有呢,我都是先当字符串读入
read(*,"(a512)") cStr
然后把 / 替换成 |

以前也是这么操作的, 先替换再还原, 哎
作者: cqflhl    时间: 2024-10-24 21:52
li913 发表于 2024-10-24 07:29
fortran把/作为namelist的结束标记,因此表控读取会忽略斜杠后的内容,且程序不会报错。也就是说,如果你读 ...

主要是有些变量单位 有/ ,  比如 N/m
作者: fcode    时间: 2024-10-24 23:11
cqflhl 发表于 2024-10-24 21:52
主要是有些变量单位 有/ ,  比如 N/m

如果这些单位你用不上的话,替换成 |  之后就不用管了。
如果你还需要用,可以在内部文件读取分配到各变量之后再替换回来。

我遇到过很多文件格式,里面的日期里包含 / ,比如 2024/10/24,也只能用这种替换的方法来解决。




欢迎光临 Fortran Coder (http://bbs.fcode.cn/) Powered by Discuz! X3.2