如何用Fortran动态生成输出格式?
-----------------------------------------------------------
1、法一,
用尖括号<>,其作用好像就是用于”在字符串中放置变量“。
个人感觉这个方法比“内部文件法”要好一点,简单且易于理解。
比如
write(*,"(<num>f10.3)") data
<>不仅可以用来做系数,而且可以与各编辑命令配合使用,比如你可以写出这样的代码:
write(*,"(<n>a<len_trim(c1)>)") trim(c1),trim(c1)
下面是一个用*输出菱形的小程序:
!输出对角线为2*m+1个“*”的菱形
!by vqimwr
program main
implicit none
integer::i,m
!输出对角线为2*m+1个“*”的菱形
m=15
do i=0,m,1
write(*,"(<m-i>x,<2*i+1>('*'))")
end do
m=m-1
do i=m,0,-1
write(*,"(<m-i+1>x,<2*i+1>('*'))")
end do
stop
end
更为变态的用法,比如配合f编辑符使用,真是方便啊:
program main
implicit none
integer::i=2,m=9,n=2
write(*, "( <i>f<m>.<n>)" ) 9.0,6.0
end program main
当然,其它编辑符也可以这样用。……
下面方法二中的例子用<>实现的话,如下:real :: data(100)
integer :: i,num
data = (/ (i,i=1,100) /)/10.0
read(*,*) num
write(*,"(<num>f10.3)") data
------------------------------------------------------------
方法二:
用字符串代替 “(……)”,即内部文件法:
bbs.programfan.com里的mltx发了个faq帖子,链接如下:
http://www.programfan.com/club/showbbs.asp?id=102851
里面第三问即有回答,直接复制过来,如下:
设有一个数组data(100),输出时,希望每行输出num个数,而num由用户输入,如何实现?
用内部文件:character(len=80) :: form
real :: data(100)
integer :: i,num
data = (/ (i,i=1,100) /)/10.0
read(*,*) num
write(form,*) "(",num,"f10.3)"
write(*,form) data
stop
end
----------------------------------------------------------
另外,不知道有没有其它动态输出的方法?望高人留印。