回 帖 发 新 帖 刷新版面

主题:求助!数据分段存储怎么做?

我刚开始学习fortran,现在想向高手请教一下:
    我现在需要处理一个数据文件,只有一列共35000行,我现在要把这个数据分段存储,该怎么实现?
    例如,我现在取前1000个数据,然后存成文件1,然后给定一个增量t(假如t=100),然后取1000+t个数据存储为文件2,以此类推,第n个文件的的数据为1000+(n-1)t个。
    这个程序该怎么做,希望高手给指点一下。

回复列表 (共5个回复)

沙发

经过研究我编写了一段比较笨的程序
    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
我只会这样一个一个存储,可以说是最笨的方法,如果有那个高手有简便的方法的话请赐教。

板凳

既然你都申请了一个35000的空间, 为什么不一次读入然后一段段写呢?

OPEN(7,file='chuna371165.dat',STATUS='OLD')
Read(7,*) pk
CLOSE(7)

OPEN(8,FILE='chuna371165-1.dat',STATUS='unknown')
....

还有文件名那里可以用字符串变量配合内部文件自动生成, 这样就可以在一个循环里面处理一系列有规律的读写文件操作.

3 楼

谢谢高手指教!

4 楼

    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 楼

请教一下,这一部分我看不太懂
              do ipos = 3, 1, -1
                 idigit = mod(nstp,10)
                 fname(II:II) = char(ichar('0') + idigit)
                 nstp = nstp / 10
    程序我运行不出来,不知道那里出错了。

我来回复

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