Написание нескольких выходных файлов на Фортране - PullRequest
1 голос
/ 27 мая 2011

Дорогие все, я пишу код, который записывает выход в несколько файлов с именами 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

Ответы [ 2 ]

3 голосов
/ 27 мая 2011

Итак, есть несколько вещей, которые не совсем ясны в вашем коде, но я думаю, что здесь наиболее важными битами являются то, что вы хотите указать имя файла с file = в операторе open, а не форматирование и циклическое выполнение единицы с iout проблематичны, потому что вы в конечном итоге попадете в системные единицы для stdin и stdout. Кроме того, с этой строкой формата создается впечатление, что вы готовитесь создать имя файла, но на самом деле вы его никогда не используете.

Я не уверен, где ты; продолжаем тестирование мода и т. д., но ниже приведена урезанная версия выше, которая просто создает файлы в цикле:

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 голосов
/ 26 марта 2019

В моем случае я хочу, чтобы имя файла имело префикс, например 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...