Fortran trim 或 adjustl 在使用两次时不起作用

Fortran trim or adjustl not working while using twice

我正在尝试对以下代码使用 trim/adjustl。似乎我得到 X_eq_ 10.0.datX_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

此外,甚至还有不使用trimavoid using an intermediary方法,例如tag