首页 文章

如何在fortran中将输出写入字符串?

提问于
浏览
1

我需要将一个格式化的输出写入字符串 DTSTR . 它用于铺设fortran而不是gfortran

INTEGER*2    MON,DAY,YEAR,HR,MINUTE,SEC,HUND
   CHARACTER    DY*2
   CHARACTER    DTSTR*24
   COMMON   /RD/ DTSTR
   ...
   ...
   WRITE(DTSTR,10)MON,DAY,YEAR,HR,MINUTE,DY,' ]'
  10 FORMAT('[ ',I2,'-',I2.2,'-',I4,2X,I2,':',I2.2,1X,2A2)

它只是一个空行 . 如果我使用它正确输出 . 但我想存储这个字符串 . 是否可以用gnu fortran做到这一点 .

WRITE(*,10)MON,DAY,YEAR,HR,MINUTE,DY,' ]'

更新

我正在尝试编译以下文件 . 我认为问题可能出在COMMON上 .

PROGRAM HELO

      CALL DOTIME

      WRITE(*,5700)DTSTR

 5700 FORMAT(24X,A24/)

      END


      SUBROUTINE DOTIME
C
      IMPLICIT NONE
      INTEGER*2    MON,DAY,YEAR,HR,MINUTE,SEC,HUND
      CHARACTER    DY*2
      CHARACTER    DTSTR*24
      COMMON   /RD/ DTSTR

      integer values(8)
      call date_and_time(VALUES=values)

        YEAR   = values(1)
        MON    = values(2)
        DAY    = values(3)
        HR     = values(5)
        MINUTE = values(6)
        SEC    = values(7)
        HUND   = values(8)
C     =================================================
C
C     Incompitable function => CALL GETDAT(YEAR,MON,DAY)
C     Incompitable function => GETTIM(HR,MINUTE,SEC,HUND)
      IF(HR .GE. 12)THEN
           IF(HR .NE. 12)HR=HR-12
           DY='PM'
      ELSE
           DY='AM'
      ENDIF
      WRITE(DTSTR,10)MON,DAY,YEAR,HR,MINUTE,DY,' ]'
   10 FORMAT('[ ',I2,'-',I2.2,'-',I4,2X,I2,':',I2.2,1X,2A2)
      RETURN
      END

1 回答

  • 3

    嗯?它适用于我:

    program testwrite
        implicit none
        INTEGER :: MON,DAY,YEAR,HR,MINUTE,SEC,HUND
        CHARACTER(LEN=2)  :: DY
        CHARACTER(LEN=24) :: DTSTR
    
        MON = 4
        DAY = 27
        YEAR= 2010
        HR  = 13
        MINUTE = 27
        SEC  = 0
        HUND = 0
        DY   ='WE'
    
        WRITE(DTSTR,10)MON,DAY,YEAR,HR,MINUTE,DY,' ]'
     10 FORMAT('[ ',I2,'-',I2.2,'-',I4,2X,I2,':',I2.2,1X,2A2)
    
        print *,'<',trim(DTSTR),'>'
    
    end program testwrite
    

    <[  4-27-2010  13:27 WE ]>
    

    正如人们所期望的那样 . 与我的几个版本的gfortran一起使用 .

    Update :是的,问题出在您的公共区块中 . 公共块不是更简单,也更好,只是将字符串作为参数传递:

    PROGRAM HELO
          IMPLICIT NONE
          CHARACTER(LEN=24) :: DTSTR
    
          CALL DOTIME(DTSTR)
    
          WRITE(*,5700)DTSTR
    
     5700 FORMAT(24X,A24/)
    
          END
    
    
          SUBROUTINE DOTIME(DTSTR)
    C
          IMPLICIT NONE
          INTEGER*2    MON,DAY,YEAR,HR,MINUTE,SEC,HUND
          CHARACTER    DY*2
          CHARACTER(LEN=24), INTENT(OUT) ::   DTSTR
    

相关问题