主题:求助!数据分段存储怎么做?
ata004
[专家分:0] 发布于 2010-12-02 20:23:00
我刚开始学习fortran,现在想向高手请教一下:
我现在需要处理一个数据文件,只有一列共35000行,我现在要把这个数据分段存储,该怎么实现?
例如,我现在取前1000个数据,然后存成文件1,然后给定一个增量t(假如t=100),然后取1000+t个数据存储为文件2,以此类推,第n个文件的的数据为1000+(n-1)t个。
这个程序该怎么做,希望高手给指点一下。
回复列表 (共5个回复)
沙发
ata004 [专家分:0] 发布于 2010-12-03 20:04:00
经过研究我编写了一段比较笨的程序
dimension pk(35000)
open(7,file='chuna371165.dat',STATUS='OLD')
OPEN(8,FILE='chuna371165-1.dat',STATUS='unknown')
WRITE(*,'(A)') ' Input dt '
READ(*,*) DT
do 10 i=1,1000
READ(7,*) pk(i)
write(8,110) pk(i)
10 continue
110 format (2X,E14.8)
close(7)
close(8)
open(7,file='chuna371165.dat',STATUS='OLD')
OPEN(9,FILE='chuna371165-2.dat',STATUS='unknown')
do 11 i=1,1000+dt
READ(7,*) pk(i)
write(9,110) pk(i)
11 continue
close(7)
close(9)
……
end
我只会这样一个一个存储,可以说是最笨的方法,如果有那个高手有简便的方法的话请赐教。
板凳
yeg001 [专家分:14390] 发布于 2010-12-05 10:17:00
既然你都申请了一个35000的空间, 为什么不一次读入然后一段段写呢?
OPEN(7,file='chuna371165.dat',STATUS='OLD')
Read(7,*) pk
CLOSE(7)
OPEN(8,FILE='chuna371165-1.dat',STATUS='unknown')
....
还有文件名那里可以用字符串变量配合内部文件自动生成, 这样就可以在一个循环里面处理一系列有规律的读写文件操作.
3 楼
ata004 [专家分:0] 发布于 2010-12-05 10:26:00
谢谢高手指教!
4 楼
bshine1225 [专家分:720] 发布于 2010-12-17 17:00:00
PROGRAM MAIN
DIMENSION pk(35000)
CHARACTER*40 fname
ccccccc READ THE DATA
open(7,file='chuna371165.dat',STATUS='OLD')
do 10 i=1,35000
READ(7,*) pk(i)
10 continue
close(7)
CCCCCCC WRITE
DO 30 II = 0,34
CCCCCCC Change the file name
fname = 'XXX.DAT'
do ipos = 3, 1, -1
idigit = mod(nstp,10)
fname(II:II) = char(ichar('0') + idigit)
nstp = nstp / 10
enddo
fname = 'chuna371165-' // TRIM(fname)
OPEN(8,FILE=fname,STATUS='unknown')
DO 20 I = II * 1000+1, (II+1)*1000
write(8,110) pk(i)
20 CONTINUE
CLOSE(8)
30 CONTINUE
110 format (2X,E14.8)
STOP
END
5 楼
ata004 [专家分:0] 发布于 2011-03-10 10:06:00
请教一下,这一部分我看不太懂
do ipos = 3, 1, -1
idigit = mod(nstp,10)
fname(II:II) = char(ichar('0') + idigit)
nstp = nstp / 10
程序我运行不出来,不知道那里出错了。
我来回复