Convert integers to strings to create output filenames at run time

前端 未结 9 2003
小鲜肉
小鲜肉 2020-11-22 02:47

I have a program in Fortran that saves the results to a file. At the moment I open the file using

OPEN (1, FILE = \'Output.TXT\')

However,

相关标签:
9条回答
  • 2020-11-22 03:49

    Try the following:

        ....
        character(len=30) :: filename  ! length depends on expected names
        integer           :: inuit
        ....
        do i=1,n
            write(filename,'("output",i0,".txt")') i
            open(newunit=iunit,file=filename,...)
            ....
            close(iunit)
        enddo
        ....
    

    Where "..." means other appropriate code for your purpose.

    0 讨论(0)
  • 2020-11-22 03:53

    you can write to a unit, but you can also write to a string

    program foo
        character(len=1024) :: filename
    
        write (filename, "(A5,I2)") "hello", 10
    
        print *, trim(filename)
    end program
    

    Please note (this is the second trick I was talking about) that you can also build a format string programmatically.

    program foo
    
        character(len=1024) :: filename
        character(len=1024) :: format_string
        integer :: i
    
        do i=1, 10
            if (i < 10) then
                format_string = "(A5,I1)"
            else
                format_string = "(A5,I2)"
            endif
    
            write (filename,format_string) "hello", i
            print *, trim(filename)
        enddo
    
    end program
    
    0 讨论(0)
  • 2020-11-22 03:53

    I already showed this elsewhere on SO (How to use a variable in the format specifier statement? , not an exact duplicate IMHO), but I think it is worthwhile to place it here. It is possible to use the techniques from other answers for this question to make a simple function

    function itoa(i) result(res)
      character(:),allocatable :: res
      integer,intent(in) :: i
      character(range(i)+2) :: tmp
      write(tmp,'(i0)') i
      res = trim(tmp)
    end function
    

    which you can use after without worrying about trimming and left-adjusting and without writing to a temporary variable:

    OPEN(1, FILE = 'Output'//itoa(i)//'.TXT')
    

    It requires Fortran 2003 because of the allocatable string.

    0 讨论(0)
提交回复
热议问题