我正在尝试创建一个重载函数num2str(x)
,它将整数或实数值作为输入并返回一个字符串值。我这样做的目的是在编写日志文件时使用它。
根据我之前发布的帖子中提出的建议(creating log file)
我创建了一个子例程message(msglevel, string)
,用于编写我的日志文件。现在我只能向此函数发送一个字符串,并且我试图使用num2str(x)
轻松创建一个字符串。
有人可以解释一下我应该在哪里放置此代码(在子程序中,在模块中),以便我可以从任何地方访问它。我看到了example这个,但它在主程序中使用它,我不能这样做。
如果这种方法是正确的,请告诉我。我还想知道是否可以修改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
答案 0 :(得分: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
答案 1 :(得分:0)
谢谢大家的帮助。这是我编写的代码,它应该与MATLAB中的num2str()
类似。它还具有显示数组和矩阵的附加功能。
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