Fortran trim 或 adjustl 在使用两次时不起作用
Fortran trim or adjustl not working while using twice
我正在尝试对以下代码使用 trim
/adjustl
。似乎我得到 X_eq_ 10.0.dat
或 X_eq_10.0 .dat
作为输出文件的名称,我期望它是 X_eq_10.0.dat
(没有空白 space)。有什么补救措施吗?
Program Test
double precision:: X
character (len=10) :: tag
character (len=100) :: outfile
X=10.0
write(tag,'(f10.1)') X
print*,'tag=',tag
outfile='X_eq_'//trim(tag)//'.dat'
print*,'Output file: ',outfile
outfile='X_eq_'//trim(tag)//trim('.dat')
print*,'Output file: ',outfile
outfile='X_eq_'//adjustl(trim(tag))//adjustl(trim('.dat'))
print*,'Output file: ',outfile
End Program Test
我已经使用 gfortran
作为编译器。
你想要的是:
outfile='X_eq_'//trim(adjustl(tag))//'.dat'
adjustl
将字符向左移动,留下尾随空白,因此您需要 trim 该结果。做 trim(tag)
没有好处,因为它已经右调整了。最后,'.dat'
不需要任何处理。
在
write(tag,'(f10.1)') X
我们说我们希望 tag
宽度为 10,小数部分有一位。使用一个小数点前 8 位的小数点符号:在(可选)符号之外会有空白填充。
这就是我们在 outfile='X_eq_'//trim(tag)//'.dat'
中看到很多空白的原因。
我们可以通过问题或其他答案中提到的 adjustl
或在编辑描述符中使用 0
来避免这种情况:
write(tag,'(F0.1)') X
F0.d
形式使字段宽度成为最小的适当字段,其中:不带前导空格。
当 tag
的长度为 100 时,仍然会有(很多)尾随空白,因此需要 trim
。
此外,甚至还有不使用trim
的avoid using an intermediary方法,例如tag
。
我正在尝试对以下代码使用 trim
/adjustl
。似乎我得到 X_eq_ 10.0.dat
或 X_eq_10.0 .dat
作为输出文件的名称,我期望它是 X_eq_10.0.dat
(没有空白 space)。有什么补救措施吗?
Program Test
double precision:: X
character (len=10) :: tag
character (len=100) :: outfile
X=10.0
write(tag,'(f10.1)') X
print*,'tag=',tag
outfile='X_eq_'//trim(tag)//'.dat'
print*,'Output file: ',outfile
outfile='X_eq_'//trim(tag)//trim('.dat')
print*,'Output file: ',outfile
outfile='X_eq_'//adjustl(trim(tag))//adjustl(trim('.dat'))
print*,'Output file: ',outfile
End Program Test
我已经使用 gfortran
作为编译器。
你想要的是:
outfile='X_eq_'//trim(adjustl(tag))//'.dat'
adjustl
将字符向左移动,留下尾随空白,因此您需要 trim 该结果。做 trim(tag)
没有好处,因为它已经右调整了。最后,'.dat'
不需要任何处理。
在
write(tag,'(f10.1)') X
我们说我们希望 tag
宽度为 10,小数部分有一位。使用一个小数点前 8 位的小数点符号:在(可选)符号之外会有空白填充。
这就是我们在 outfile='X_eq_'//trim(tag)//'.dat'
中看到很多空白的原因。
我们可以通过问题或其他答案中提到的 adjustl
或在编辑描述符中使用 0
来避免这种情况:
write(tag,'(F0.1)') X
F0.d
形式使字段宽度成为最小的适当字段,其中:不带前导空格。
当 tag
的长度为 100 时,仍然会有(很多)尾随空白,因此需要 trim
。
此外,甚至还有不使用trim
的avoid using an intermediary方法,例如tag
。