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

时间:2014-11-28 13:42:10

标签: 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 = "(/, X, 17(<Chr>), /, 2X, A, /, X, 17(<Chr>))") "My Program Name"

显然,还有另一种方法可以通过格式说明符语句中的变量来显示我想要显示的内容。例如:

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)

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

1 个答案:

答案 0 :(得分:2)

您尝试使用的代码(<>)不是标准的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