爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 45821|回复: 21

[图形美化] gs中用fwrite写dat文件失败 出来的是类似二进制的文件

[复制链接]

新浪微博达人勋

发表于 2021-4-19 11:19:45 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
gs的目标是从grd文件中提取想要的数据,并生成dat文件,准备用fortran进一步计算,参照书本以及网上大家的脚本,尝试写了一个很简单的gs试一下效果:'reinit'
'open ./abc.ctl'

'set fwrite F:/work/dat/u3.dat'
'set gxout fwrite'
'set t 30'
'set lev 1000'
'd u3'
'disable fwrite'
'reinit'


运行中没有报错,然而生成的dat文件打开显示的是类似二进制文件那样的乱码:


生成的dat文件是这样的。。。

生成的dat文件是这样的。。。


查了家园里其他人的类似脚本,貌似基本也是这个语法去写的gs,求助!希望写成正常十进制的dat。谢谢!
ps:数据文件是自己跑程序生成的,ctl文件也顺利画图无异样。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2021-6-23 09:36:24 | 显示全部楼层
有一说一 我知道我的问题不入大神的眼 但是我也是认真看了书查了资料尝试无数次无果后过来提问 论坛的活跃我觉得毛毛雨小雨中雨的积极参与也很重要 感谢之前留言我的各位提供了各种思路 最后是在和我师兄的在线讨论中找到答案 感谢师兄提供参考文献和建议 解决方式不只有一条 我在这之后 也尝试了直接用fortran读 当然也成功了 小雨们加油 大胆提问 多多尝试 总有办法的!说了一堆废话 这小帖子里也未必有人看到 就当自勉吧
密码修改失败请联系微信:mofangbao
回复 支持 1 反对 0

使用道具 举报

新浪微博达人勋

发表于 2021-4-19 14:15:36 | 显示全部楼层
提取出二进制的,再放到Fortran转成十进制的应该就行了吧,grads可以直接写成十进制到文件吗?
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2021-4-19 14:23:41 | 显示全部楼层
这样提取出来的数据还是二进制的,直接拿fortran去读二进制数据就可以
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2021-4-19 15:42:55 | 显示全部楼层
写出来的本来就是二进制的,直接打开不乱吗才怪呢
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2021-4-19 16:21:45 | 显示全部楼层
GrADS写得是single类型的,不是ASCII码。。
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2021-6-22 17:33:18 | 显示全部楼层
都说只提问不自己圆场的都是不负责的帖子,那我自问自答一下吧,希望帮得到其它童鞋。
上述大家都说的对的,我发问时的写法,写出来的依然是二进制。
然后,grads是可以直接写出二进制的
  1. *******文件输出******
  2. 'set t 'tii
  3. file='./txt/'t2'_td3.txt'
  4. 'set gxout print'
  5. zi=zk
  6. while ( zi <= zkk )
  7. 'set z 'zi
  8. 'set prnopts %g 402 1'
  9. 'd td3'
  10. rc=write(file,result)
  11. zi=zi+1
  12. endwhile
  13. rc=close(file)
复制代码

set gxout时采用print即为输出ASCII码值,参考文献是:
https://max.book118.com/html/2017/0518/107570153.shtm
输出格式:
set prnopts format(%g) line_n(402) blank_n(1)'
其中%g为采用小数或标准指数格式中宽度较小的一种;line_n好像是列数,实操的时候确认一下输出即可,因为我需要输出数据矩阵,所以根据需要设置的。
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2021-6-22 17:40:35 | 显示全部楼层
上述代码是我gs中的一部分,直接截取出来的,大家主要看输出及其设置部分即可。
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2021-6-23 09:40:33 | 显示全部楼层
xfz147256 发表于 2021-4-19 14:15
提取出二进制的,再放到Fortran转成十进制的应该就行了吧,grads可以直接写成十进制到文件吗?

可以的 用set gxout print
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2021-6-23 09:44:31 | 显示全部楼层
霹雳电光鼠 发表于 2021-4-19 14:23
这样提取出来的数据还是二进制的,直接拿fortran去读二进制数据就可以

是的 后来经过反复确认 确实这样写出的依旧是二进制 改用print后实现ASCII输出了 后来也fortran编程实现了 谢谢!
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

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