【问题标题】:How to get rid of unwanted spacing in Fortran's print output?如何摆脱 Fortran 打印输出中不需要的间距?
【发布时间】:2015-09-23 00:15:09
【问题描述】:

这可能看起来像一个微不足道的问题,但我无法通过谷歌搜索找到任何答案。我有这个小程序:

Program Test_spacing_print
  Integer:: N
  Real:: A,B

  N=4; A=1.0; B=100.0

  print*,'N =',N

  print*,'A =',A,' B =',B
  print '(2(A3,F8.2,1X))' ,'A =',A,' B =',B
  print 20, A,B
  20 format('A =',F8.2,x,'B =',F8.2)

End Program Test_spacing_print

这给了我输出:

     N =           4
 A =   1.00000000      B =   100.000000
A =    1.00  B   100.00
A =    1.00 B =  100.00

我想去掉= 符号之后不需要的空格,即我想要的输出应该看起来像(= 之后的 1 个空格):

 N = 4
 A = 1.00000000 B = 100.000000
 A = 1.00 B = 100.00
 A = 1.00 B = 100.00

在 fortran 中可以吗?

【问题讨论】:

    标签: format fortran output fortran90


    【解决方案1】:

    您说您在输出中有“不需要的”空间,但您使用指定的显式格式拥有您所要求的空间。当您没有提供格式时,列表导向的输出意味着您对间距没有发言权。

    要输出A,您需要编辑描述符F8.2:字段宽度将为8。小数点后有两位数,小数点本身留下五位数字(和符号)之前的数字小数点。因此,对于 A1. 没有打印可选符号,您将有四个空格。

    就像 Fortran 95 引入了I0 edit descriptor,所以它允许F0.d。 [对于其他描述符,尽管G0.d 是在以后添加的。]F0.2 将提供小数点后两位数字的最小字段宽度,这就是您想要的。但请注意,您需要在 = 符号后显式添加一个空格:

    print '("N = ", I0)', N
    print '(2(A4,F0.2,:,1X))' ,'A = ',A,'B = ',B
    

    [我还使用了: 编辑描述符来避免尾随空格。]

    如果你想要一个真正的 Fortran 90 答案,就像你标记的那样,那么它不会那么好,但它仍然可以完成。

    【讨论】:

    • 感谢@francescalus 的解释。我不知道这个 I0 描述符。是的,我有点想知道真正的 F90 答案是什么。
    • 这相当痛苦,而且主要是历史价值而非实用价值,但是:您可以写入一个临时字符变量,然后用adjustl 删除前导空格,然后打印该结果。最小宽度输出要好得多并得到广泛支持。
    • 再次感谢。这可能是一个相关的问题,我们是否也有指数格式的最小字段宽度? E0.2 好像不行。
    • 不,E0.2 是不允许的。在 F2008 下,允许的最小宽度描述符为 IBOZFGG 在 F2008 中引入,其他在 F95 中引入。
    • 虽然E 略有不同:如果您知道比例因子、符号和符号模式,以及是否打印前导可选零,您就知道@ 之前有多少个字符是非空白的987654344@ 这比其他一些类型的工作量要少一些。 (如果这些对你都没有意义,那可能是一个新问题。)
    猜你喜欢
    • 2018-12-16
    • 2015-01-08
    • 1970-01-01
    • 2011-12-27
    • 2018-01-15
    • 2012-06-29
    • 2011-04-21
    • 2021-10-25
    • 1970-01-01
    相关资源
    最近更新 更多