使用Fortran文件命名格式打开多个文件以进行读取

4
我需要帮助在Fortran中逐个打开多个文件以进行读取。下面的代码文件名称正确,但在打开之前会覆盖文件内容。
我该如何防止这种情况发生?
WRITE(FN,10)lam, zeta, (array(k)%str)!,k=1,N)
WRITE(6,*)FN!filename 
OPEN(1,FILE=FN, status='replace')
CLOSE(1)


10 FORMAT('4e3_2048_',(I3.0),'_',(I2.2),'_',(A3),'.ksz_cl.txt') !

我只想打开并读取@francescalus文件中的数据。 - user9404237
感谢 @francescalus - user9404237
请不要完全更改问题以提出后续或相关问题。对于小的澄清,对答案的评论是适当的,但对于像这样的大型重写,最好提出一个新问题。当然,如果您确实提出另一个问题,可以引用此问题以提供任何相关背景。 - francescalus
1个回答

4
当您使用status='replace'打开文件时,会导致文件被删除并重新创建(Fortran 2018 12.5.6.18):

如果指定了REPLACE且文件已经存在,则文件将被删除,使用相同的名称创建一个新文件,并将状态更改为OLD。

当您想要从文件中读取内容时,这是不好的。相反,可以使用类似以下语句:

open(1, file=FN, action='read', status='old', position='rewind')

确保:文件存在;已打开以供阅读;位于文件的开头位置。

我看过status='replace',意思是连接被替换,允许重用单元号。但正如可以看出的那样,这是不正确的。话说回来:一旦连接关闭,单元号可以被快乐地重复使用。事实上,如果open语句引用已经连接到不同文件的单元,则对第一个连接有一个隐含的close


1
哦,还有,在您的代码中不要使用小于10的单元编号,因为那可能会与预连接的单元发生冲突。更好的方法是使用NEWUNIT=,让编译器运行时为您分配一个空闲的单元编号。 - janneb
感谢@francescalus。我有一个跟进问题。我正在尝试在循环中读取多个文件,但似乎我的代码每次都会读取文件,这使得速度变慢。我已经包含了一个标志,只读取第一次的文件,但它似乎不起作用。我已更新代码。 - user9404237

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接