Convert integers to strings to create output filenames at run time

前端 未结 9 2126
小鲜肉
小鲜肉 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:42

    Here is my subroutine approach to this problem. it transforms an integer in the range 0 : 9999 as a character. For example, the INTEGER 123 is transformed into the character 0123. hope it helps.

    P.S. - sorry for the comments; they make sense in Romanian :P

     subroutine nume_fisier (i,filename_tot)
    
       implicit none
       integer :: i
    
       integer :: integer_zeci,rest_zeci,integer_sute,rest_sute,integer_mii,rest_mii
       character(1) :: filename1,filename2,filename3,filename4
       character(4) :: filename_tot
    
    ! Subrutina ce transforma un INTEGER de la 0 la 9999 in o serie de CARACTERE cu acelasi numar
    
    ! pentru a fi folosite in numerotarea si denumirea fisierelor de rezultate.
    
     if(i<=9) then
    
      filename1=char(48+0)
      filename2=char(48+0)
      filename3=char(48+0)
      filename4=char(48+i)  
    
     elseif(i>=10.and.i<=99) then
    
      integer_zeci=int(i/10)
      rest_zeci=mod(i,10)
      filename1=char(48+0)
      filename2=char(48+0)
      filename3=char(48+integer_zeci)
      filename4=char(48+rest_zeci)
    
     elseif(i>=100.and.i<=999) then
    
      integer_sute=int(i/100)
      rest_sute=mod(i,100)
      integer_zeci=int(rest_sute/10)
      rest_zeci=mod(rest_sute,10)
      filename1=char(48+0)
      filename2=char(48+integer_sute)
      filename3=char(48+integer_zeci)
      filename4=char(48+rest_zeci)
    
     elseif(i>=1000.and.i<=9999) then
    
      integer_mii=int(i/1000)
      rest_mii=mod(i,1000)
      integer_sute=int(rest_mii/100)
      rest_sute=mod(rest_mii,100)
      integer_zeci=int(rest_sute/10)
      rest_zeci=mod(rest_sute,10)
      filename1=char(48+integer_mii)
      filename2=char(48+integer_sute)
      filename3=char(48+integer_zeci) 
      filename4=char(48+rest_zeci)
    
     endif
    
     filename_tot=''//filename1//''//filename2//''//filename3//''//filename4//''
     return
     end subroutine nume_fisier
    

提交回复
热议问题