cqflhl 发表于 2024-10-23 22:23:09

读文件中的记录时,遇到斜杠/,就不读

只要遇到/, 不论是数字, 还是字符串就立马中断, 后面一系列乱码附入, 不知道有没有什么解决方法

fcode 发表于 2024-10-23 22:32:19

没有呢,我都是先当字符串读入
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:11

fortran把/作为namelist的结束标记,因此表控读取会忽略斜杠后的内容,且程序不会报错。也就是说,如果你读取3个变量,但斜杠前只有1个数据,那就只有第一个变量有数据,后两个变量不读取,因此是随机乱码。
解决方案如楼上所说。

cqflhl 发表于 2024-10-24 21:51:13

fcode 发表于 2024-10-23 22:32
没有呢,我都是先当字符串读入
read(*,"(a512)") cStr
然后把 / 替换成 |


以前也是这么操作的, 先替换再还原, 哎

cqflhl 发表于 2024-10-24 21:52:03

li913 发表于 2024-10-24 07:29
fortran把/作为namelist的结束标记,因此表控读取会忽略斜杠后的内容,且程序不会报错。也就是说,如果你读 ...

主要是有些变量单位 有/ ,比如 N/m

fcode 发表于 2024-10-24 23:11:49

cqflhl 发表于 2024-10-24 21:52
主要是有些变量单位 有/ ,比如 N/m

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

我遇到过很多文件格式,里面的日期里包含 / ,比如 2024/10/24,也只能用这种替换的方法来解决。
页: [1]
查看完整版本: 读文件中的记录时,遇到斜杠/,就不读