主题:二进制文件怎么用fortran读
duanxianzhe
[专家分:0] 发布于 2010-09-02 10:51:00
求哪位大侠在fortran怎么读写二进制文件方面给我指点迷津。。。最好能提供一个程序范例。。
最后更新于:2010-09-02 12:09:00
回复列表 (共22个回复)
11 楼
duanxianzhe [专家分:0] 发布于 2010-09-02 14:43:00
程序好像读的是错误的,请大侠查明。。。
12 楼
jstzhurj [专家分:4680] 发布于 2010-09-02 14:52:00
[quote]
程序好像读的是错误的,请大侠查明。。。[/quote]
能提供文件数据结构说明么?
13 楼
duanxianzhe [专家分:0] 发布于 2010-09-02 14:58:00
我也不清楚,我是通过Gromacs运行出来所产生的traj.trr,这是个轨迹文件,里面记录了粒子的坐标,速度,以及所受到的力。听我师兄说,可以先转换为16进制文件,这样读的要方便一些,因为毕竟16进制文件只要两个字节就可以存储。但是,转换之后,还是看不明白,里面到底是啥东东。
14 楼
jstzhurj [专家分:4680] 发布于 2010-09-02 15:10:00
[quote]
我也不清楚,我是通过Gromacs运行出来所产生的traj.trr,这是个轨迹文件,里面记录了粒子的坐标,速度,以及所受到的力。听我师兄说,可以先转换为16进制文件,这样读的要方便一些,因为毕竟16进制文件只要两个字节就可以存储。但是,转换之后,还是看不明白,里面到底是啥东东。[/quote]
你查一下Gromacs说明书,把输出文件结构搞清楚!
15 楼
duanxianzhe [专家分:0] 发布于 2010-09-02 15:13:00
好的,麻烦大侠啦。。一定给你好评啊
16 楼
jstzhurj [专家分:4680] 发布于 2010-09-03 08:45:00
现在初步探明,你的二进制文件是9336 bytes 一个block(Gromacs不了解,对应一个step?event?particle?),文件记录了100个block。每个block都有头信息,里面记录了block序号,头信息后面是数据。
现在需要知道每个头信息里面每次记录的数据3,36是什么意思?变量数?粒子数?
记录粒子的坐标,速度,以及所受到力数据类型是什么?数据怎么排列?
17 楼
臭石头雪球 [专家分:23030] 发布于 2010-09-03 08:47:00
[quote]
我也不清楚,我是通过Gromacs运行出来所产生的traj.trr,这是个轨迹文件,里面记录了粒子的坐标,速度,以及所受到的力。听我师兄说,可以先转换为16进制文件,这样读的要方便一些,因为毕竟16进制文件只要两个字节就可以存储。但是,转换之后,还是看不明白,里面到底是啥东东。[/quote]
从来没听说有16进制文件的说法。[em7]
18 楼
duanxianzhe [专家分:0] 发布于 2010-09-04 16:43:00
[size=3]大侠:对,应该是有100个block(我们理解为帧),每个block记录着步数step,时间t,然后是盒子的在x,y,z坐标内的长,宽,高,接着是盒子中所放粒子在x,y,z的分速度(这个文件中没有存储粒子的坐标和所受的力)。
师兄指点我在linux中输入vi -b traj.trr进入二进制文件的界面,然后输入:%!xxd,转换到16进制数据的界面。里面有些能看明白,但是大部分看不明白,特别是盒子的大小以及粒子的速度存储在哪一列,根本摸不着头脑。请大侠在这个方面传授我一点技巧,使我能够对以后的二进制文件能不再茫然。在此,小弟叩求。。。[/size]
19 楼
jstzhurj [专家分:4680] 发布于 2010-09-04 18:19:00
[quote][size=3]大侠:对,应该是有100个block(我们理解为帧),每个block记录着步数step,时间t,然后是盒子的在x,y,z坐标内的长,宽,高,接着是盒子中所放粒子在x,y,z的分速度(这个文件中没有存储粒子的坐标和所受的力)。
师兄指点我在linux中输入vi -b traj.trr进入二进制文件的界面,然后输入:%!xxd,转换到16进制数据的界面。里面有些能看明白,但是大部分看不明白,特别是盒子的大小以及粒子的速度存储在哪一列,根本摸不着头脑。请大侠在这个方面传授我一点技巧,使我能够对以后的二进制文件能不再茫然。在此,小弟叩求。。。[/size][/quote]
比如说这个文件的盒子大小x,y,z是多大?多少个粒子?粒子数随时间变化吗?x,y,z的分速度是单精度?双精度?一切靠猜,要解析这个文件相当困难的。[em1]
20 楼
duanxianzhe [专家分:0] 发布于 2010-09-04 23:36:00
其实每一个block的数据结构是一样的,我只要弄清楚每一个block就行了,然后运用循环依次读下去。只是现在对其尚不清楚。。。不知有没有有效的方法?
我来回复