【发布时间】:2014-12-31 05:40:47
【问题描述】:
我有一个 fortran 95 程序,它以这种形式写入一个数组:
do temp = 1, temp_final
do MC = 1, N_MC
do x = 0, N
do y = 0, M
write(1,*) x, y, array(x,y)
enddo
enddo
enddo
write(1,*) T
T = T - temp*factor
enddo
在我的程序中,我将这些值写入一个文件,但在两个温度值之间,我写入了不止一次(但 N_MC 次)x,y 数组(x,y)值,因为它们在 MC 中循环,最多 N_MC 步。
由于仅生成文件,并且程序需要很长时间才能运行,因此如果您可以建议任何技术来编辑已生成的文件并仅保留第一组值并将它们传输到另一个文件或编辑父文件,并保留更改。
我的文件是这样的
Temp 0.69999999999999998 !(initial value)
0 0 -1.0000000000000000
0 1 -1.0000000000000000
0 2 -1.0000000000000000
0 3 1.0000000000000000
0 4 1.0000000000000000
1 0 -1.0000000000000000
1 1 1.0000000000000000
1 2 1.0000000000000000
1 3 -1.0000000000000000
1 4 -1.0000000000000000
2 0 -1.0000000000000000
2 1 1.0000000000000000
2 2 -1.0000000000000000
2 3 1.0000000000000000
2 4 1.0000000000000000
3 0 -1.0000000000000000
3 1 -1.0000000000000000
3 2 1.0000000000000000
3 3 -1.0000000000000000
3 4 -1.0000000000000000
0 0 1.0000000000000000
0 1 -1.0000000000000000
0 2 1.0000000000000000
0 3 1.0000000000000000
0 4 -1.0000000000000000
1 0 1.0000000000000000
1 1 1.0000000000000000
1 2 1.0000000000000000
1 3 -1.0000000000000000
1 4 -1.0000000000000000
2 0 -1.0000000000000000
2 1 1.0000000000000000
2 2 -1.0000000000000000
2 3 1.0000000000000000
2 4 1.0000000000000000
3 0 -1.0000000000000000
3 1 -1.0000000000000000
3 2 1.0000000000000000
3 3 -1.0000000000000000
3 4 -1.0000000000000000
..........
N_MC-2 times (as two sets are already shown) !( after that there is new temp having new array values)
Temp 0.59999999999999998 ! like this, I am having array values for diff. temp
.
.
.
Temp 0.09999999999999998 !(final vaule)
我只想保留第一组值,而不是在那之后............. N_MC 乘以 temp 的连续值之间的值。
我不知道如何调用文件并删除我不想要的特定部分并再次保存。
注意
我只想传输第一组值 0-3, 0-9, array(i,j)
0 0 -1.0000000000000000
0 1 -1.0000000000000000
0 2 -1.0000000000000000
0 3 1.0000000000000000
0 4 1.0000000000000000
1 0 -1.0000000000000000
1 1 1.0000000000000000
1 2 1.0000000000000000
1 3 -1.0000000000000000
1 4 -1.0000000000000000
2 0 -1.0000000000000000
2 1 1.0000000000000000
2 2 -1.0000000000000000
2 3 1.0000000000000000
2 4 1.0000000000000000
3 0 -1.0000000000000000
3 1 -1.0000000000000000
3 2 1.0000000000000000
3 3 -1.0000000000000000
3 4 -1.0000000000000000
! Not after that for Temp = 0.6999999999990
单个温度的文件。
【问题讨论】:
-
不清楚您要保留什么,但无论如何作为一般原则(无论语言如何)从文件中删除某些内容,您重写整个文件,省略您要删除的内容。对于这个例子,我怀疑你最好的方法是简单地把你需要的东西保存在内存中,每次都重新写入整个文件。
-
@george 文件非常大。
-
如果您使用的是类似 Linux 的平台,请熟悉诸如
grep、split、cut之类的实用程序,它们都可用于从文件中获取位。如果您使用的是类似 Windows 的平台,请找出本地等价物。 -
不是一个直接的答案,但是反转“do x”和“do y”循环可能会加快速度,因为您的代码将能够更直接地跟踪“数组”。当然,您必须记住,这会改变输出的顺序。
标签: linux file fortran editing fortran95