在Fortran中编写多个输出文件

问题描述 投票:1回答:2

亲爱的所有人,我正在编写一个代码,将输出写入名为1.dat,2.dat,.....的多个文件中。这是我的代码,但它提供了一些不寻常的输出。你可以告诉我我的代码有什么问题吗?基本上我无法获得正确的语法来打开多个文件,在它们上面写入并在打开下一个文件之前关闭。谢谢。我的代码:

implicit double precision (a-h,o-z),integer(i-n)
dimension b(3300,78805),bb(78805)
character*70,fn 
character*80,fnw 
nf = 3600       ! NUMBER OF FILES
nj = 360        ! Number of rows in file.
do j = 1, nj
    bb(j)  = 0.0
end do
c-------!Body program-----------------------------------------------
iout = 0    ! Output Files upto "ns" no.
DO i= 1,nf  ! LOOP FOR THE NUMBER OF FILES
    if(mod(i,180).eq.0.0) then
        open(unit = iout, file = 'formatted')
        x = 0.0
        do j = 1, nj
            bb(j) = sin(x)
            write(iout,11) int(x),bb(j)
            x = x + 1.0
        end do
        close(iout)
        iout = iout + 1
    end if
END DO
11  format(i0,'.dat')   
END
fortran fortran95
2个回答
3
投票

所以有一些事情不能立即清楚你的代码,但我认为最相关的一点是你想在file =语句中使用open指定文件名,而不是格式化,并且使用iout循环遍历单位是有问题的,因为你最终会为stdin和stdout命中系统定义的单位。此外,使用该格式行看起来您已准备好创建文件名,但您实际上从未使用它。

我不确定你在哪里;使用mod测试等,但下面是上面的精简版本,它只是在循环中创建文件:

program manyfiles
    implicit none
    character(len=70) :: fn
    integer, parameter :: numfiles=40
    integer, parameter :: outunit=44

    integer :: filenum, j

    do filenum=1,numfiles
        ! build filename -- i.dat
        write(fn,fmt='(i0,a)') filenum, '.dat'

        ! open it with a fixed unit number
        open(unit=outunit,file=fn, form='formatted')

        ! write something
        write(outunit, *) filenum

        ! close it 
        close(outunit)
    enddo
end program manyfiles

0
投票

在我的情况下,我希望文件名有一个像dyn_的前缀

program manyfiles
implicit none
character(len=70) :: filename
integer, parameter :: numfiles=40
integer, parameter :: outunit=44

integer :: filenum, j

do filenum=1,numfiles
    write(filename,'("dyn_",i0,".dat")') filenum
    open(unit=outunit,file=filename, form='formatted')
    write(outunit, *) filenum
    close(outunit)
enddo
end program manyfiles
© www.soinside.com 2019 - 2024. All rights reserved.