2

num2str(x)入力として整数値または実数値を取り、文字列値を返すオーバーロードされた関数を作成しようとしています。これを行う目的は、ログ ファイルを書き込むときに使用することです。

以前の投稿 (ログ ファイルの作成)での提案に基づいてmessage(msglevel, string)、ログ ファイルの書き込みに使用するサブルーチンを作成しました。現在、この関数には文字列のみを送信できます。を使用して文字列を簡単に作成できるようにしようとしていますnum2str(x)

どこからでもアクセスできるように、このコードをどこに配置すればよいか (サブルーチン内、モジュール内) を誰かに説明してもらえますか? この例を見ましたが、メインプログラムで使用されていますが、これはできません。

このアプローチが正しいかどうか教えてください。またnum2str(x)、配列変数の文字列を返すように変更できるかどうかも知りたいです。

!GLOBAL FUNCTIONS
interface num2str
    function num2str_int(number)
        integer,intent(in)::number
        character(len=*)::num2str_int
    end function
    character function num2str_real(number)
        real::number
        character(len=*)::num2str_real
    end function
end interface 
function num2str_int(number)
    implicit none
    integer,intent(in)::number
    character(len=*)::num2str_int
    write(num2str_int,'(I)')number
    return
end function
character function num2str_real(number)
    implicit none
    real,intent(in)::number
    character(len=*)::num2str_real
    write(num2str_real,'(F6.4)')number
    return
end function
4

2 に答える 2

3

私は間違いなくモジュールに行きます:

module strings

  ! GLOBAL FUNCTIONS
  public :: num2str

  ! Everything else is private
  private

  interface num2str
    module procedure num2str_int
    module procedure num2str_real
  end interface 

contains

  function num2str_int(number)
      implicit none
      integer,intent(in) :: number
      character(len=6)   :: num2str_int
      character(len=6)   :: tmp

      write(tmp,'(I6)')number
      num2str_int = tmp
  end function

  function num2str_real(number)
      implicit none
      real,intent(in)    :: number
      character(len=6)   :: num2str_real
      character(len=6)   :: tmp

      write(tmp,'(F6.4)')number
      num2str_real = tmp
  end function
end module

program test_strings
  use strings

  write(*,*) num2str(1)//' '//num2str(1.23)  
end program
于 2013-11-01T20:47:33.103 に答える
0

ご協力ありがとうございました。これは私が書いたコードでnum2str()、MATLAB と同様に動作するはずです。配列と行列を表示する追加機能もあります。

module module_common_functions
 !GLOBAL FUNCTIONS
  public :: num2str

  interface num2str
      module procedure num2str_int
      module procedure num2str_real
      module procedure num2str_array
      module procedure num2str_matrix
  end interface

contains

function num2str_int(number)
    implicit none
    integer,intent(in)::number
    character(len=10)::num2str_int
    character(len=10):: tmp
    write(tmp,'(I6)')number
    num2str_int=trim(adjustl(tmp))
    return
end function

function num2str_real(number)
    implicit none
    real,intent(in)::number
    character(len=32):: tmp
    ! Deferred length allocatable character result.
    character(len=:), allocatable ::num2str_real
    ! Format specifier changed to use full length.
    write(tmp,'(F32.4)')number
    ! Reallocation on assignment means length of result will 
    ! be set to match length of right hand side expression.
    ! Note ordering of trim and adjustl.
    num2str_real=trim(adjustl(tmp))
end function

function num2str_array(number,col)
    implicit none
    integer::i,col
    real, dimension(col)::number
    character(len=32):: tmp
    character(len=33*col)::num2str_array
    num2str_array =''
    do i=1,col
        write(tmp,'(F12.4)') number(i)
        num2str_array = trim(num2str_array)//adjustl(trim(tmp))//','
    end do
    return
end function 

function num2str_matrix(number,row,col)
    implicit none
    integer::i,j,row,col
    real,dimension(row,col)::number
     character(len=32):: tmp
    character(len=33*row*col)::num2str_matrix
    num2str_matrix=''

    do i=1,row
        do j=1,col
            write(tmp,'(F12.4)') number(i,j)
            num2str_matrix= trim(num2str_matrix)//adjustl(trim(tmp))//','
        end do
    end do
    return
end function


end module
于 2013-11-04T17:25:06.500 に答える