如何格式化为尽可能小的字符串

时间:2015-03-03 21:33:06

标签: fortran string-formatting

我有以下功能:

function fname(proc, ct) result(filename)
    implicit none
    integer, intent(in) :: proc, ct
    character(len=100) :: filename

    write(filename,"(a,i9.9,a,i0,a)") "/step", ct, "-proc", proc, ".txt"
end function fname

在现代Fortran中,有一种自动方法可以使得到的字符串具有适合所有格式化数据的最小可能大小吗?请注意,使用i0格式会生成结果字符串变量的大小。

1 个答案:

答案 0 :(得分:3)

有可能,但不能直接在read语句中。如果将整数换行到字符串转换为函数:

  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

然后你可以使用allocatable deferred-length string

character(:), allocatable :: filename

filename = "/step" // itoa99(ct) // "-proc" // itoa(proc) // ".txt"

您可以调整函数,将整数格式作为伪参数,而不是制作更多版本。

另一种可能性是拥有一个大的临时字符串并修剪它

character(100) :: tmp
character(:), allocatable :: filename

write(tmp,"(a,i9.9,a,i0,a)") "/step", ct, "-proc", proc, ".txt"

filename = trim(tmp)