我有以下功能:
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
格式会生成结果字符串变量的大小。
答案 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)