我正在处理一个复杂的代码并进行了一些更改。 代码的主要目的是打开两个文件并通过一次从每个文件中获取数据来执行计算。这些文件非常大,未格式化。
我的第一个更改是使用分段文件类型标志保存这些文件,并让代码以分段形式读取它们。这很好。
我的下一个更改是将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的当前记录,膝盖是所需的记录。
这是REWIND必需的地方,FILE2需要倒带才能到达后续N + 1(FILE1)计算的N-1。我的问题是这个REWIND被证明是最大的瓶颈,我试图通过实现这个IF语句来做一个BACKSPACE来加速它(在我的修改之前只有ELSE部分中的语句存在," + 6& #34;因为我的文件在记录开始之前有一个6行标题。
问题:现在我做了这个改变,BACKSPACE似乎正在加速这个过程,但现在当我读取FILE2记录时,数据与我刚刚使用REWIND函数时的数据不同。这里的逻辑似乎很好,它实际上第一次对FILE2这样做,但之后数据似乎是错误的。
我想知道是否有关于分段记录的内容我需要注意,以便BACKSPACE正常工作。此外,我的膝盖和kbeg出现正确。唯一的问题是当我将数据读入数组时,数据与仅存在REWIND函数时的数据不同。
我错过了什么吗?
如果我需要提供更多信息,请告诉我!