动态输出格式设置
Dynamic output format setting
我尝试动态生成输出格式,因为要打印的变量数量可以动态变化。我用以下两种方法做了一些实验(见下面的上下文),但它们都导致了这样的错误消息:
forrtl: error (63): 输出转换错误,单元1016,文件/panfs/roc/Node_ 16.txt
第一种方法使用字符串指定输出格式,例如
real a(4) = [1 2 3 4]
int size = 4
write(string,'(a,i3,a)') '(a,',size,'(f9.4))'
write(*, string) a(:)
第二种方法是我刚从网上学来的,只占一行,但也没有用:
write(*,'(a,<size>f9.4)') a(:)
请帮我设置格式。谢谢
编辑:我找到了问题的罪魁祸首。在我的实际项目中,数组 "a" 的某些元素非常大,以至于 f9.4 不适合显示完整数组。为了解决这个问题,我用 e11.3 之类的东西替换了 f9.4。
Fortran 最近添加了 *
作为无限格式的转发器。例如,'( *(2X, F3.1) )'
这比动态格式更易于使用。
您无需提供准确的值数,多填即可。正常的方法是使用足够大的值,比如
'(a,999f9.4)'
在 Fortran 2008 中,您可以使用 M.S.B 功能。显示 *999(f9.4)
.
如果您出于其他目的需要动态字符串,请使用连接运算符 //
。
我尝试动态生成输出格式,因为要打印的变量数量可以动态变化。我用以下两种方法做了一些实验(见下面的上下文),但它们都导致了这样的错误消息:
forrtl: error (63): 输出转换错误,单元1016,文件/panfs/roc/Node_ 16.txt
第一种方法使用字符串指定输出格式,例如
real a(4) = [1 2 3 4]
int size = 4
write(string,'(a,i3,a)') '(a,',size,'(f9.4))'
write(*, string) a(:)
第二种方法是我刚从网上学来的,只占一行,但也没有用:
write(*,'(a,<size>f9.4)') a(:)
请帮我设置格式。谢谢
编辑:我找到了问题的罪魁祸首。在我的实际项目中,数组 "a" 的某些元素非常大,以至于 f9.4 不适合显示完整数组。为了解决这个问题,我用 e11.3 之类的东西替换了 f9.4。
Fortran 最近添加了 *
作为无限格式的转发器。例如,'( *(2X, F3.1) )'
这比动态格式更易于使用。
您无需提供准确的值数,多填即可。正常的方法是使用足够大的值,比如
'(a,999f9.4)'
在 Fortran 2008 中,您可以使用 M.S.B 功能。显示 *999(f9.4)
.
如果您出于其他目的需要动态字符串,请使用连接运算符 //
。