2015-01-01 61 views
1

我试图动态地创建输出格式,因为要打印的变量数量可以动态变化。我已经通过以下两种方法进行了一些实验(请参阅下文中的内容),但它们都导致了如下错误消息:动态输出格式设置

forrtl:错误(63):输出转换错误,单元1016,file/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。

回答

3

Fortran最近添加了*作为无限制格式的中继器。例如,'(*(2X, F3.1))'这比动态格式更易于使用。

1

您不需要提供确切数量的值,表示更多可以。正常的方法是使用足够大的值,如

 '(a,999f9.4)' 

在Fortran 2008中,您可以使用M.S.B的特性。显示*999(f9.4)

如果您需要动态字符串用于其他目的,请使用连接运算符//