我正在尝试使用gfortran 4.4.6编译其他人的FORTRAN代码 . 原始编码器使用了Compaq FORTRAN之类的东西 .
有问题的代码应该读取像'foo.txt'这样的文件名并创建一个名为'foo_c.txt'的新文件:
file_label_end = SCAN(filename, '.') - 1
WRITE (output_filename,5) filename
5 FORMAT (A<file_label_end>, '_c.txt' )
gfortran抱怨字符说明符的开角括号 . 也就是说,而不是“A3”,他有“A <(值为3的变量)>” . 我找不到任何关于从变量插入格式宽度的信息......这可能吗?如果没有,解决这个问题的最佳方法是什么?
Update:
这似乎正在起作用(编译):
file_label_end = SCAN(par_filename, '.', .TRUE. ) + 1
output_filename = par_filename(1:file_label_end) // '_c.par'
但我后来有类似的情况:
12 FORMAT (<n-1>F10.5)
...
READ(1,12) (cat_parm (blk,j), j = 1,n-1)
我试图通过创建格式字符串来修复:
write(fmt12,'(I0,A4)') n-1, 'F10.5'
!12 FORMAT (fmt12)
12 FORMAT (fmt=fmt12)
但是“fmt”中的“t”会被标记为“格式字符串中需要非负宽度”的错误
2 回答
最简单的是使用现代的fortran
否则,我会使用类似的内部写入在格式字符串中写入数字 .
在Fortran编辑描述符中使用
<>
是非标准的,尽管已广泛实现 . 你当然可以从变量构建编辑描述符,标准方法是通过内部编写,类似这样(省略声明):然后
但在你的情况下,这并不是完全必要的 . 你可以试试这个
使用'a'编辑描述符省略宽度意味着将写入表达式中的所有字符 . 你可能想宣布
如果你还没有这样做的话 .