【发布时间】:2022-02-09 01:40:50
【问题描述】:
我正在尝试在我的输入文件中交换一些字符。 如果我将数据导出到新文件,我的代码可以正常工作。 但是,我无法将更改导出到同一个文件。在前 2 行之后,它没有正确导出数据。你对我有什么建议吗?
这是我需要更改的数据(我需要删除 % 符号)
test.su2:
%file
%
%
%
4 4
4 5
3 5
%
%
3 4
4 2
这是我的代码,它忽略了以 % 开头的行并将其写入另一个 .su2 文件:
程序更新_su2_file
IMPLICIT NONE INTEGER :: I CHARACTER(80) :: LINE OPEN(10,FILE='2DCRM.su2',FORM='FORMATTED') OPEN(20,FILE='2DCRM_updated.su2',FORM='FORMATTED') DO 100 WHILE (.TRUE.) READ (10,'(A)',END=999) LINE !Read line from input file IF(LINE(1:1).EQ.'%') GOTO 100 !Skip line starts with % WRITE(20,'(A)') TRIM(LINE) !Write line to output file 100 END DO 999 CONTINUE CLOSE (10) CLOSE (20) END PROGRAM update_su2_file
基本上我需要将更新后的数据写入 test.su2 文件而不是新文件。
我尝试如下更新我的代码,但正如我上面提到的,它没有正确写入我的数据。
程序更新_su2_file
IMPLICIT NONE INTEGER :: I CHARACTER(80) :: LINE OPEN(10,FILE='test.su2',FORM='FORMATTED') DO 100 WHILE (.TRUE.) READ (10,'(A)',END=999) LINE !Read line from input file IF(LINE(1:1).EQ.'%') GOTO 100 !Skip line starts with % WRITE(10,'(A)') TRIM(LINE) !Write line to output file 100 END DO 999 CONTINUE CLOSE (10) END PROGRAM update_su2_file
这是不正确的输出文件:
%file %file
【问题讨论】:
-
老实说,只需将新文件复制到旧文件上即可。您可以从 Fortran 调用
mv或cp。 -
如果我的问题不清楚,我很抱歉。我需要删除“%”字符而不创建新文件。因为输入文件的大小可能很大并且需要时间。 @弗拉基米尔F
-
无论如何,这是你应该做的事情。只写一个新文件。或者在文本编辑器中进行,并希望它有一些巧妙的算法来避免新文件(恕我直言,不太可能,但我知道的很少)。
-
如果您担心创建文件需要多长时间,或者第二个临时文件有多大,您可能会找到一种方法来忽略那些“注释行”加工。例如,如果您正在读入一个数组并想使用
read(10,*) big_array,则根据追加新行进行重写。 -
即使像
sed -i '/^%/d' test.su2这样的就地操作也可以通过创建一个临时工作文件来工作。