将字符串长度插入fortran格式说明符
我正在尝试使用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' ) 但我后来也遇到了类似的情况: 12 FORMAT (<n-1>F10.5) ... READ(1,12) (cat_parm (blk,j), j = 1,n-1) 12格式(F10.5) ... 读取(1,12)(类别参数(blk,j),j=1,n-1) 我试图通过创建一个格式字符串来修复它: write(fmt12,'(I0,A4)') n-1, 'F10.5' !12 FORMAT (fmt12) 12 FORMAT (fmt=fmt12) 写入(fmt12,,(I0,A4)’n-1,'F10.5' !12格式(fmt12) 12格式(fmt=fmt12)将字符串长度插入fortran格式说明符,fortran,gfortran,Fortran,Gfortran,我正在尝试使用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' ) 但我后来也
但是“fmt”中的“t”被标记为“格式字符串中需要非负宽度”的错误。最简单的方法是使用现代fortran
WRITE (output_filename,'(a)') trim(filename) // '_c.txt'
否则,我将使用类似的内部写入操作将数字写入格式字符串。在Fortran编辑描述符中使用
是非标准的,尽管已广泛实现。当然,您可以从变量构建编辑描述符,标准方法是通过内部写入,类似这样(省略声明):
然后
write(output_filename,fmt=format_string) filename
但在你的情况下,这并不是完全必要的。你可以试试这个
file_label_end = SCAN(filename, '.') - 1
WRITE (output_filename,'(a)') filename(1:file_label_end)//'_c.txt'
使用“a”编辑描述符省略宽度意味着表达式中的所有字符都将被写入。您可能需要申报
character(len=*), allocatable :: output_filename
如果您还没有这样做。非常有帮助。此外,SCAN的BACK选项也很有用。但是我试着把这个应用到程序中的另一个实例中。我创建了一个保存格式的字符串变量;当我使用它(“12格式(fmt12)”或“12格式(fmt=fmt12)”时,编译器会用“格式字符串中需要的非负宽度”来标记该行(它实际上会标记fmt中的“t”[在这两种情况下])。
file_label_end = SCAN(filename, '.') - 1
WRITE (output_filename,'(a)') filename(1:file_label_end)//'_c.txt'
character(len=*), allocatable :: output_filename