回 帖 发 新 帖 刷新版面

主题:关于读取文件

我有个文件,想从里面读取一系列数据做一些运算,数据如下:数据存在一个叫pq的文件里:
   1.00000   22.00000   -2.06096   
   1.00000   23.00000   -1.57290   
   1.00000   24.00000   -1.35700   
   1.00000   25.00000   -1.22200   
   1.00000   26.00000    4.49397   
   1.00000   27.00000    4.74150   
   1.00000   28.00000    4.89220   
   2.00000   22.00000   -2.04708   
   2.00000   23.00000   -1.84789   
   2.00000   24.00000   -1.41992   
   2.00000   25.00000   -1.14863   
   2.00000   26.00000    4.58274   
   2.000     27.00       4.760     
   2.00000   28.00000    4.99774   
   3.00000   22.00000   -2.20708   
   3.00000   23.00000   -1.83416   
   3.00000   24.00000   -1.61858   
   3.00000   25.00000   -0.94659   
   3.00000   26.00000    4.78601   
   3.00000   27.00000    4.84115   
   3.00000   28.00000    5.30778   
   4.00000   22.00000   -2.45202   
   4.00000   23.00000   -1.85610   
   4.00000   24.00000   -1.48940   
   4.00000   25.00000   -0.64076   
   4.00000   26.00000    4.74843   
   4.00000   27.00000    5.25845   
   4.00000   28.00000    5.65457   

第一列数是格点数,第二列是次数,第三列是每次的数值,比如第一个格点,第22次数值为-2.06096,依次类推。想编个程序,把这些数据导出到一个以格点数为横坐标,纵坐标是每个格点上对应的数值,例如,第一个格点,有7个数,依次把这些格点放到y轴上。我编个程序,但是没输出数据啊。
     program prog
      real, allocatable :: e(:,:)
      real, allocatable :: k(:)
      real, dimension(3) ::k0,a
      character(len=32):: input, output
      character(len=32):: xx, yy

      write(6,*) 'name of input file, name of output file'
      read(5,*) input,output !输入存储数据的文件名和导入数据到的文件的名字

      open(10,file=input, status='old')
      open(11,file=output, status='new')

      read(10,*) xx, yy, nbands !xx,yy, nbands 分别是格点数,次数,每次的值
      allocate(e(nk,nbands)) !存储数据值,纵坐标
      allocate(k(nk,3)) !存储格点数,横坐标
      do i=1,nk
      read(10,*)(k(i)) !从文件里读取格点数
      write(11,*)(k(i))
      read(10,*) (e(i,n),n=1,nbands) !读取每个格点数对应的数值
      write(11,*) (e(i,n),n=1,nbands)
      enddo
      
      stop
      end program prog     
 
为什么最后输出的文件里没数值呢?

回复列表 (共8个回复)

沙发

编译都不通过!谈何输出?!

板凳


大姐,帮忙看下吧[em2][em2][em2][em2][em2][em2][em2][em2]
手头上东西太多了。哎。。。

3 楼

[quote]
大姐,帮忙看下吧[em2][em2][em2][em2][em2][em2][em2][em2]
手头上东西太多了。哎。。。[/quote]

稀里糊涂的,搞这么多干啥?!编程这么久,看不到进步......

4 楼

implicit none 不用?!

nk是啥?数值多少?莫名其妙......

5 楼

学艺不精。还要练功;[em2][em2][em2][em2][em2]

program prog
  implicit none
      real, allocatable :: e(:,:)
      real, allocatable :: k(:)
      integer::nk=4,nbands=7
      character(len=32):: input, output
      character(len=32):: xx, yy

      write(6,*) 'name of input file, name of output file'
      read(5,*) input,output !输入存储数据的文件名和导入数据到的文件的名字

      open(10,file=input, status='old')
      open(11,file=output, status='new')

      read(10,*) xx, yy, nbands !xx,yy, nbands 分别是格点数,次数,每次的值
      allocate(e(nk,nbands)) !存储数据值,纵坐标
      allocate(k(nk)) !存储格点数,横坐标
      do i=1,nk
      read(10,*)(k(i)) !从文件里读取格点数
      write(11,*)(k(i))
      read(10,*) (e(i,n),n=1,nbands) !读取每个格点数对应的数值
      write(11,*) (e(i,n),n=1,nbands)
      enddo
      
      stop
      end program prog     
nk=4表示有四个格点1、2、3、4;nbands=7表示对应每个格点有7个数,分别对应第22。23.24.25.26.27.28次。想达到这样的目的:
先读取第22次每个格点的数值,放在文件里。
1  。。。
2  。。。
3  。。。
4  。。。
然后读取第23次每个格点的数值,再放在文件里
1  。。。
2  。。。
3  。。。
4  。。。
,最后读取第28次每个格点的数字放在文件里。

6 楼

program prog
      implicit none
      integer :: i,j,nk,nbands
      parameter (nk=4,nbands=7)
      real,dimension(nk,nbands) :: e
      
      character(len=32):: input, output
      real :: xx, yy

      write(6,*) 'name of input file, name of output file'
      read(5,*) input,output !输入存储数据的文件名和导入数据到的文件的名字

      open(10,file=input, status='old')
      open(11,file=output, status='unknown')

      do i=1,nk
       do j=1,nbands
        read(10,*) xx, yy, e(i,j) 
       enddo
      enddo 
     
       do i=1,nbands
        do j=1,nk
         write(11,*) j,e(j,i)
        enddo
       enddo 
     
      stop
     end program prog

7 楼


[em4][em4][em4]小弟是见到高人了。最适合科研的人才啊!!![em8][em8][em8][em8][em9][em9][em9]

8 楼


写出来的程序,不知所云[em4][em15][em6][em7][em9],难道没有一点思路么......

我来回复

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