在 Fortran 中输出字符串和值的格式

Format to output a string and a value in Fortran

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

READ(5,*)IDIAM,ISET

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

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

这行得通,但它把所有的东西都写在一行上。我希望每个输出行只有一个字符串和一个变量,而不重复代码中的写入行(因为我有很多变量)。我该怎么做?

松散地,如果您使用列表定向输出(这是 write 语句中 * 的效果),那么编译器在输出的外观上有很大的灵活性("may" 和 "reasonable" 是其规范中使用的术语)。这与这里的内容冲突:需要一些特定的控件。

具体控制是什么时候开始新的记录。

一般情况下,一条记录对应一整行。这意味着您要将每个 string/value 对写入单独的记录。为每一对设置一个 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, ...

与原始方法相比,这很愚蠢,但希望这种方法的力量显而易见。

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