在 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, ...
与原始方法相比,这很愚蠢,但希望这种方法的力量显而易见。
有关显式格式的一般详细信息,请参阅文档。
我正在用 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, ...
与原始方法相比,这很愚蠢,但希望这种方法的力量显而易见。
有关显式格式的一般详细信息,请参阅文档。