主题:关于读取文件
我有个文件,想从里面读取一系列数据做一些运算,数据如下:数据存在一个叫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
为什么最后输出的文件里没数值呢?
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
为什么最后输出的文件里没数值呢?