我正在尝试动态写入不同的文件名(例如“output_0001.txt”“output_0002.txt”),但反复出现以下错误:
forrtl: severe (66): output statement overflows record, unit -5, file
Internal Formatted Write
我已经尝试将我的“文件名”字符数组扩展到过大的长度,但它仍然无效。不知道为什么我的字符串会变得太大皱眉表情如果我将“文件名”更改为静态字符数组,那么它工作正常。有什么想法吗?
我的代码如下:
character(30)::filename
...
write(filename, fmt = "(2A, I0.4, A)") out_file_basename, "_", i, ".dat"
open(unit = 3, file = filename)
答案 0 :(得分:3)
从您的评论中,您有类似
的内容character(30)::filename, out_file_basename
...
write(filename, fmt = "(2A, I0.4, A)") out_file_basename, "_", i, ".dat"
这将是一个问题。从其他情况来看,可能很容易解决。
之间存在差异
character(len=30) out_file_basename
out_file_basename = "output" ! Or from get_command_argument
write(filename, fmt = "(2A, I0.4, A)") out_file_basename, "_", i, ".dat"
和
write(filename, fmt = "(2A, I0.4, A)") "output", "_", i, ".dat"
不同之处在于out_file_basename
用24个空格填充(长度为30),文字"output"
不是(长度为6)。在第一个中,您将需要一个至少长度为39的字符变量。
简单的解决方案是修剪out_file_basename
:
write(filename, fmt = "(2A, I0.4, A)") TRIM(out_file_basename), "_", i, ".dat"
但为了安全起见,您希望filename
足够大。