我在Fortran 95中编写代码,读取一些看起来像1.dat,2.dat,......,9999.dat的文件。我的代码读取0001.dat,0002.dat,.......... 9999.dat。它看起来像
character*12, fn
..
DO i=1,n
write(fn,*)i
open(1,file=fn)
do j=1,5
read(1,*)x(i,j),y(i,j),z(i,j)
end do
10 format(i4.4,'.dat')
您可以建议我如何才能阅读我喜欢的文件? Thanks.u
答案 0 :(得分:2)
如果您将格式更改为
,该怎么办?10 format (i4,'.dat')
我试过这个例子
character *8 filename
do i=1,9999
write (filename, 10) i
write (*,*) filename
end do
10 format (i4,'.dat')
end
我的文件名中没有前导零。
你正在寻找这顶帽子吗? <强>更新强>
我明白了......
然后格式应为
10 format (i0,'.dat')
'0'表示左对齐。
我用下面的pgm测试了它
character*12, fn
integer x(11,5)
integer y(11,5)
integer z(11,5)
do i=1,11
write(fn,10)i
open(1,file=fn)
do j=1,5
read(1,*)x(i,j),y(i,j),z(i,j)
end do
close(1)
end do
10 format(i0,'.dat')
end
这对我有用。
更新2
implicit none
integer n,ns,i,j
real x(9999,400),y(9999,400),z(9999,400),a(9999,400),aa(400)
character*12, fn
n = 14
ns = 2
do i = 0,n
do j = 1, 5
a(i,j) = 0.0
end do
end do
do i=1,n
write(fn,10)i
open(1,file=fn)
do j=1,5
read(1,*)x(i,j),y(i,j),z(i,j)
if(i.le.ns) then
a(i,j) = x(i,j)
else
a(i,j) = x(i,j) + a(i-ns,j)
end if
aa(j) = a(i,j)
write(*,*) j,x(i,j),y(i,j),z(i,j),a(i,j)
end do
close(1)
do j = 1, 5
write(*,*) aa(j)
end do
end do
10 format(i0,'.dat')
end
为我工作。
输出(在Ubuntu 10.10上)。
./a.out
1 1.0000000 3.0000000 5.0000000 1.0000000
2 2.0000000 5.0000000 7.0000000 2.0000000
3 3.0000000 7.0000000 8.0000000 3.0000000
4 1.0000000 4.0000000 8.0000000 1.0000000
5 1.0000000 4.0000000 8.0000000 1.0000000
1.0000000
2.0000000
3.0000000
1.0000000
1.0000000
1 3.0000000 8.0000000 5.0000000 3.0000000
2 7.0000000 5.0000000 7.0000000 7.0000000
3 3.0000000 7.0000000 8.0000000 3.0000000
4 1.0000000 4.0000000 10.000000 1.0000000
5 3.0000000 5.0000000 7.0000000 3.0000000
3.0000000
7.0000000
3.0000000
1.0000000
3.0000000
1 3.0000000 8.0000000 5.0000000 4.0000000
2 7.0000000 5.0000000 7.0000000 9.0000000
3 3.0000000 7.0000000 8.0000000 6.0000000
4 1.0000000 4.0000000 10.000000 2.0000000
5 3.0000000 5.0000000 7.0000000 4.0000000
4.0000000
9.0000000
6.0000000
2.0000000
4.0000000
1 3.0000000 8.0000000 5.0000000 6.0000000
2 7.0000000 5.0000000 7.0000000 14.000000
3 3.0000000 7.0000000 8.0000000 6.0000000
4 1.0000000 4.0000000 10.000000 2.0000000
5 3.0000000 5.0000000 7.0000000 6.0000000
6.0000000
14.000000
6.0000000
2.0000000
6.0000000
1 3.0000000 8.0000000 5.0000000 7.0000000
2 7.0000000 5.0000000 7.0000000 16.000000
3 3.0000000 7.0000000 8.0000000 9.0000000
4 1.0000000 4.0000000 10.000000 3.0000000
5 3.0000000 5.0000000 7.0000000 7.0000000
7.0000000
16.000000
9.0000000
3.0000000
7.0000000
1 3.0000000 8.0000000 5.0000000 9.0000000
2 7.0000000 5.0000000 7.0000000 21.000000
3 3.0000000 7.0000000 8.0000000 9.0000000
4 1.0000000 4.0000000 10.000000 3.0000000
5 3.0000000 5.0000000 7.0000000 9.0000000
9.0000000
21.000000
9.0000000
3.0000000
9.0000000
1 3.0000000 8.0000000 5.0000000 10.000000
2 7.0000000 5.0000000 7.0000000 23.000000
3 3.0000000 7.0000000 8.0000000 12.000000
4 1.0000000 4.0000000 10.000000 4.0000000
5 3.0000000 5.0000000 7.0000000 10.000000
10.000000
23.000000
12.000000
4.0000000
10.000000
1 3.0000000 8.0000000 5.0000000 12.000000
2 7.0000000 5.0000000 7.0000000 28.000000
3 3.0000000 7.0000000 8.0000000 12.000000
4 1.0000000 4.0000000 10.000000 4.0000000
5 3.0000000 5.0000000 7.0000000 12.000000
12.000000
28.000000
12.000000
4.0000000
12.000000
1 3.0000000 8.0000000 5.0000000 13.000000
2 7.0000000 5.0000000 7.0000000 30.000000
3 3.0000000 7.0000000 8.0000000 15.000000
4 1.0000000 4.0000000 10.000000 5.0000000
5 3.0000000 5.0000000 7.0000000 13.000000
13.000000
30.000000
15.000000
5.0000000
13.000000
1 3.0000000 8.0000000 5.0000000 15.000000
2 7.0000000 5.0000000 7.0000000 35.000000
3 3.0000000 7.0000000 8.0000000 15.000000
4 1.0000000 4.0000000 10.000000 5.0000000
5 3.0000000 5.0000000 7.0000000 15.000000
15.000000
35.000000
15.000000
5.0000000
15.000000
1 3.0000000 8.0000000 5.0000000 16.000000
2 7.0000000 5.0000000 7.0000000 37.000000
3 3.0000000 7.0000000 8.0000000 18.000000
4 1.0000000 4.0000000 10.000000 6.0000000
5 3.0000000 5.0000000 7.0000000 16.000000
16.000000
37.000000
18.000000
6.0000000
16.000000
At line 23 of file c.for (unit = 1, file = '12.dat')
Fortran runtime error: End of file