Fortran 使用write打印时如何删除前导空格?
假设我有以下代码Fortran 使用write打印时如何删除前导空格?,fortran,fortran95,Fortran,Fortran95,假设我有以下代码 program fortran open(900, FILE='SOMETHING') write(900, *) '21' end program fortran 文件格式将是 21 也就是说,数字前有一个空格。如何清除该空间?您可以将其写成字符串: PROGRAM fortran OPEN(900,FILE='SOMETHING') WRITE(900,'(a)') '21' END PROGRAM FORTRAN 回应该评论:
program fortran
open(900, FILE='SOMETHING')
write(900, *) '21'
end program fortran
文件格式将是
21
也就是说,数字前有一个空格。如何清除该空间?您可以将其写成字符串:
PROGRAM fortran
OPEN(900,FILE='SOMETHING')
WRITE(900,'(a)') '21'
END PROGRAM FORTRAN
回应该评论: 更明确的方法是将数字写入字符串(此步骤也可以使用列表定向I/O),从字符串中删除空格,最后输出左对齐的: 这种解决方案可能比必要的更复杂,但它是一种非常灵活的方法,可以很容易地扩展到任意目的和格式 以列表定向格式(在
write(unit,*)
中的*
)编译器通常插入前导空格。第一列过去用于控制,但现在已从Fortran中删除
您可以使用任何想要去掉前导空格的显式格式。例如,一般的
g0
one或特定于字符串的a
或特定于整数的i
通常,如果要控制格式,必须使用格式化输出,而不是未格式化/默认格式(例如,*
)。有关列表定向IO没有所需输出的问题很常见。如前所述,请改用格式化IO。我还想删除实值中的前导空格。请使用零字段宽度,例如write(*,'(f0.4))3.14
> cat SOMETHING
21
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
> ./a.out
1.230000000000000E+000
1.2000000E-01