【问题标题】:Format to output a string and a value in Fortran在 Fortran 中输出字符串和值的格式
【发布时间】:2015-01-20 16:54:38
【问题描述】:

我正在用 Fortran 编写代码,我希望它以这种方式从文件中读取输入值

READ(5,*)IDIAM,ISET

我想将它们写入一个打开的文件。我写了这段代码

 WRITE(36,*)'IDIAM',IDIAM,'ISET',ISET

这可行,但它将所有内容写在一行上。我希望每个输出行只有一个字符串和一个变量,而不需要在代码中重复写入行(因为我有很多变量)。我该怎么做?

【问题讨论】:

    标签: format fortran output


    【解决方案1】:

    粗略地说,如果您使用列表导向输出(这是 write 语句中 * 的效果),那么编译器在输出外观(“may”和“合理”是其规范中使用的术语)。这与这里的冲突:需要一些特定的控制。

    具体控制是何时开始新记录。

    通常,一条记录对应一整行。这意味着您希望将每个字符串/值对写入单个记录。为每一对设置一个 write 语句可以管理这一点,但这正是您不想要的。

    要使用单个write 语句,答案是使用显式格式。类似的东西

    write(36,'(A,1X,I0)') 'IDIAM',IDIAM,'ISET',ISET
    

    这样当一对被写入时,记录就结束了。

    为了简单起见,我从变量名中假设变量是整数。如果不是,则考虑使用通用编辑(使用G)。还有斜杠编辑描述符 (/),它强制创建一个新记录,这在有模式时很有用:请注意,格式 '(A,1X,I0,/,A,1X,I0)' 在特定情况下与上面的效果相同,即有两对要写入.

    在 IanH 更正上面的“/”格式后,系统提示我提及冒号编辑和重复说明符。如前所述,声明

    write(36, '(A,1X,I0,/)') 'IDIAM',IDIAM,'ISET',ISET, ...
    

    终止格式转换的记录(当达到) 时)。这可能会导致每对之间出现空行:一个用于/,一个用于格式结束。因此,使用/ 与第一种格式更接近的匹配是

    write(36, '(*(A,1X,I0,:,/))') 'IDIAM',IDIAM,'ISET',ISET, ...
    

    与原版相比,这是相当愚蠢的,但这种方法的威力希望是显而易见的。

    有关一般显式格式的详细信息,请参阅文档。

    【讨论】:

    • 谢谢你,但是如果变量的格式不同,我怎么能强迫它们全部写成真实的(例如)?
    • 如果你想把所有东西写成真实的,你可以write(...) 'IDIAM', REAL(IDIAM)(等等,即返回一个真实的表示)使用适当的真实类型编辑描述符(FE, ...)。但是,列表导向输入不需要一致的格式,并且您的列表导向输出对于每种类型都有不同的格式。因此,我建议使用G edit,它还将处理诸如逻辑类型将清理代码之类的事情。 [这就是广义编辑的重点。]
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-12
    • 2012-03-01
    相关资源
    最近更新 更多