Fortran Coder

查看: 350|回复: 5
打印 上一主题 下一主题

[输入输出] 读文件中的记录时,遇到斜杠/,就不读

[复制链接]

57

帖子

15

主题

0

精华

熟手

F 币
248 元
贡献
118 点
跳转到指定楼层
楼主
发表于 2024-10-23 22:23:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
只要遇到/, 不论是数字, 还是字符串就立马中断, 后面一系列乱码附入, 不知道有没有什么解决方法
分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

2033

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1641 元
贡献
709 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

沙发
发表于 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 , * ) ....

835

帖子

2

主题

0

精华

大宗师

F 币
3926 元
贡献
2334 点
板凳
发表于 2024-10-24 07:29:11 | 只看该作者
fortran把/作为namelist的结束标记,因此表控读取会忽略斜杠后的内容,且程序不会报错。也就是说,如果你读取3个变量,但斜杠前只有1个数据,那就只有第一个变量有数据,后两个变量不读取,因此是随机乱码。
解决方案如楼上所说。

57

帖子

15

主题

0

精华

熟手

F 币
248 元
贡献
118 点
地板
 楼主| 发表于 2024-10-24 21:51:13 | 只看该作者
fcode 发表于 2024-10-23 22:32
没有呢,我都是先当字符串读入
read(*,"(a512)") cStr
然后把 / 替换成 |

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

57

帖子

15

主题

0

精华

熟手

F 币
248 元
贡献
118 点
5#
 楼主| 发表于 2024-10-24 21:52:03 | 只看该作者
li913 发表于 2024-10-24 07:29
fortran把/作为namelist的结束标记,因此表控读取会忽略斜杠后的内容,且程序不会报错。也就是说,如果你读 ...

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

2033

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1641 元
贡献
709 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

6#
发表于 2024-10-24 23:11:49 | 只看该作者
cqflhl 发表于 2024-10-24 21:52
主要是有些变量单位 有/ ,  比如 N/m

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

我遇到过很多文件格式,里面的日期里包含 / ,比如 2024/10/24,也只能用这种替换的方法来解决。
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-12-23 03:03

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表