Formatting 如何在格式说明符语句中使用变量?

Formatting 如何在格式说明符语句中使用变量?,formatting,fortran,intel-fortran,Formatting,Fortran,Intel Fortran,我可以使用: write (*, FMT = "(/, X, 17('-'), /, 2X, A, /, X, 17('-'))") "My Program Name" 要在控制台窗口上显示以下行: ----------------- My Program Name ----------------- 现在,我想以上述格式显示预定义字符,而不是-。我尝试了此代码,但没有成功: character, parameter :: Chr = Achar(6) write (*, FMT = "

我可以使用:

write (*, FMT = "(/, X, 17('-'), /, 2X, A, /, X, 17('-'))") "My Program Name"
要在控制台窗口上显示以下行:

-----------------
 My Program Name
-----------------
现在,我想以上述格式显示预定义字符,而不是
-
。我尝试了此代码,但没有成功:

character, parameter :: Chr = Achar(6)

write (*, FMT = "(/, X, 17(<Chr>), /, 2X, A, /, X, 17(<Chr>))") "My Program Name"
字符,参数::Chr=Achar(6)
写入(*,FMT=“(/,X,17(),/,2X,A,/,X,17())”)我的程序名
显然,还有另外一种方法可以通过格式说明符语句中的变量来显示我试图显示的内容。例如:

character, parameter :: Chr = Achar(6)
integer :: i, iMax = 17

write (*, FMT = "(/, X, <iMax>A1, /, 2X, A, /, X, <iMax>A1)") (Chr, i = 1, iMax), &
                                                              "My Program Name",  &
                                                              (Chr, i = 1, iMax)
字符,参数::Chr=Achar(6)
整数::i,iMax=17
写入(*,FMT=“(/,X,A1,/,2X,A,/,X,A1)”)(Chr,i=1,iMax)&
“我的程序名”&
(Chr,i=1,iMax)

但是,我想知道是否有任何方法可以在格式说明符语句中使用变量或调用函数。

您尝试使用的代码(
)不是标准Fortran。它是一些编译器接受的扩展。只需将格式字符串构建为字符串

"(/, X, 17(" // Chr // "), /, 2X, A, /, X, 17(" // Chr // "))"
对于数字情况,您必须准备一个包含该值的字符串

write(chMax, *) iMax

"(/, X, " // chMax // "A1, /, 2X, A, /, X, " // chMax // "A1)"
或者你可以使用一些功能,如果你有它的话

"(/, X, " // itoa(iMax) // "A1, /, 2X, A, /, X, " // itoa(iMax) // "A1)"
但最好还是事先打电话,避免多次打电话

该函数可以如下所示:

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

当然,您可以编写
REPEAT('-',17)
来生成一个包含17个
-
的字符串,而不是一个隐含的do循环。当然,在实践中,您可以编写
REPEAT('-',17)
来生成一个包含17个
-
的字符串,而不必为自己的函数翻滚而烦恼。@HighPerformanceMark,我没有研究格式字符串的细节,只是演示了如何将数字或字符串放入其中。