我正在处理一个复杂的代码并进行了一些更改。代码的主要目的是打开两个文件并通过一次从每个文件中获取数据来执行计算。这些文件非常大且未格式化。
我的第一个更改是使用分段文件类型标志保存这些文件,并让代码将它们作为分段读取。这工作正常。
我的下一个更改是将 REWIND 转换为 BACKSPACE,这就是我的代码的样子:
if (kneed .le. kbeg) then
kback=kbeg-kneed
if(kback.le.5)then
do i=1,kback
backspace ivec
end do
else
rewind ivec
do 10 i=1,kneed+6
read(ivec)
10 continue
end if
end if
这里发生了什么:IVEC 是文件的句柄。FILE1 按顺序读取,如 1, 2, 3, 4,....N。然后,对于 FILE1 中的每个 N,FILE2 被读取两次,并在 FILE1 中的记录 N 和 FILE2 的记录 N-1 和 N+1 之间执行计算。即计算(FILE1_N, FILE2_N-1) 和计算(FILE1_N, FILE2_N+1)。
在代码中,kbeg 是 FILE2 的当前记录,kned 是想要的记录。
这是需要 REWIND 的地方,需要倒带 FILE2 以到达 N-1 以进行后续的 N+1 (FILE1) 计算。我的问题是这个 REWIND 被证明是最大的瓶颈,我试图通过实现这个 IF 语句来执行 BACKSPACE 来加速它(在我修改之前,只有 ELSE 部分中的语句存在,“+6”在那里因为我的文件在记录开始之前有一个 6 行标题)。
问题:现在我做了这个改变,BACKSPACE 似乎加快了进程,但现在当我读取 FILE2 记录时,数据与我刚刚使用 REWIND 功能时不同。这里的逻辑似乎很好,它实际上是我第一次对 FILE2 执行此操作,但之后数据似乎是错误的。
我想知道是否需要注意有关分段记录的某些内容,以使 BACKSPACE 正常工作。此外,我的膝盖和 kbeg 显示正确。唯一的问题是,当我将数据读入数组时,数据与仅存在 REWIND 函数时的数据不同。
我错过了什么吗?
如果我需要提供更多信息,请告诉我!