回 帖 发 新 帖 刷新版面

主题:关于二进制文件的写和读操作

问题是这样的:
我在lunix下算个程序,要产生一个大数组,占内存太大了,跟别人学习之后知道,最好是把产生的文件以二进制的形式存下来,用的时候再去读取。我有这个想法,大家看下行不行?
     
DO j=L-2,1,-1  
       write(fname,'(A7,I2.2,A4)') 's',j,'.dat'
Open(99, File = 'filename, Form = 'unFormatted', Status = 'unknown' )
..........
close(99)
enddo
每循环一次,就产生一个数据,然后把它对应的存储在第j个文件里。
小疑问:
文件名这样写行不行?
我在调用的时候这样调用可以吗?
DO J=1,L-2
       write(fname,'(A7,I2.2,A4)') 's',j,'.dat'
open(99,file=fname,ACCESS='direct',FORM=’UNFORMATTED’, RECL=8)
每次循环调用一个数据,用到谁调用谁。因为我的数据都是complex*16,所以RECL=8,可以吗?
谢谢啊!!

回复列表 (共3个回复)

沙发

Recl 不一定是一个数据,可以是多个。

我记得你的数据不是 N * L 的么?

你的长度可以是 4*N ,或者 16*N。这取决于你的编译器设置。

或者 4*L ,16*L 等

板凳

这是我看了你的帖子之后的一点想法。前面在算的时候,每次产生一组数据,就按照顺序把它放在一个数组里,数据放的多了数组会很大,这时候占内存太多。
我想把产生的数据以二进制形式存起来,每产生一组数据就存在一个地方,比如产生100个数据,就存100个二进制文件,等到用的时候再把它读出来用,这样的话不是很节约内存吗?
就是不知道存的时候该怎么给他命名。
下面这样可以吗?
DO j=L-2,1,-1  
       write(fname,'(A7,I2.2,A4)') 's',j,'.dat'
Open(99, File = 'filename, Form = 'unFormatted', Status = 'unknown' )
..........
close(99)
enddo
每循环一次,就产生一个数据,然后把它对应的存储在第j个文件里。
我在调用的时候这样调用可以吗?
DO J=1,L-2
       write(fname,'(A7,I2.2,A4)') 's',j,'.dat'
open(99,file=fname,ACCESS='direct',FORM=’UNFORMATTED’, RECL=8)
每次循环调用一个数据,用到谁调用谁。

对RECL 这个参数有点模糊。谢谢啊!!





3 楼

这样命名可以。

RecL 并不复杂。

你把二进制文件想象成火车,把 RecL 想象成一列车厢的长度。把 REC 想象成第几列车厢就可以了。

十分简单。

我不建议你一开始就用自己的代码去书写。

作为熟悉二进制文件的一开始,我建议你写一些简单的程序,只有十个“车厢”,每个“车厢”只有16个字节。

等你都熟悉之后,再应用到自己的大量代码中去。

我来回复

您尚未登录,请登录后再回复。点此登录或注册