使用write打印时如何删除前导空格?

use*_*863 7 fortran fortran95

假设我有以下代码

program fortran
  open(900, FILE='SOMETHING')   
  write(900, *) '21'    
end program fortran
Run Code Online (Sandbox Code Playgroud)

文件格式为

 21
Run Code Online (Sandbox Code Playgroud)

也就是说,号码前面有一个空格.如何摆脱那个空间?

Ale*_*ogt 8

你可以把它写成一个字符串:

PROGRAM fortran 

  OPEN(900,FILE='SOMETHING')
  WRITE(900,'(a)') '21'

END PROGRAM FORTRAN
Run Code Online (Sandbox Code Playgroud)
> cat SOMETHING 
21
Run Code Online (Sandbox Code Playgroud)

回应评论:

更明确的方法是将数字写入字符串(您也可以在此步骤中使用列表导向的I/O),从字符串中删除空格trim,最后输出左侧调整的adjustl:

program test
  character(len=23) :: str

  write(str,'(ES23.15 E3)') 1.23d0
  write(*,'(a)') adjustl(trim(str))

  write(str,'(ES14.7 E2)') 0.12e0
  write(*,'(a)') adjustl(trim(str))
end program
Run Code Online (Sandbox Code Playgroud)
> ./a.out 
1.230000000000000E+000 
1.2000000E-01
Run Code Online (Sandbox Code Playgroud)

这个解决方案可能比必要的更复杂,但它是一种非常灵活的方法,可以根据任意目的和格式轻松扩展.

  • 我们零字段宽度,例如。`写(*,'(f0.4)')3.14` (3认同)