Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unix FORTRAN:读取大型分段文件、倒带和退格_Unix_Fortran_Backspace_Rewind - Fatal编程技术网

Unix FORTRAN:读取大型分段文件、倒带和退格

Unix FORTRAN:读取大型分段文件、倒带和退格,unix,fortran,backspace,rewind,Unix,Fortran,Backspace,Rewind,我正在编写一个复杂的代码,并做了一些更改。 代码的主要目的是打开两个文件,并通过每次将每个文件中的数据作为记录来执行计算。这些文件非常大且未格式化 我的第一个更改是使用segmentedfiletype标志保存这些文件,并且让代码将它们作为segmented读入。这个很好用 我的下一个更改是将倒带转换为退格,这是我的代码的样子: if (kneed .le. kbeg) then kback=kbeg-kneed

我正在编写一个复杂的代码,并做了一些更改。 代码的主要目的是打开两个文件,并通过每次将每个文件中的数据作为记录来执行计算。这些文件非常大且未格式化

我的第一个更改是使用segmentedfiletype标志保存这些文件,并且让代码将它们作为segmented读入。这个很好用

我的下一个更改是将倒带转换为退格,这是我的代码的样子:

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是文件的句柄。文件1是按顺序读取的,如,1,2,3,4,…N。 然后,对于文件1中的每个N,将读取文件2两次,并在文件1中的记录N与文件2的记录N-1和N+1之间执行计算。 即 计算(文件1\u N,文件2\u N-1)和计算(文件1\u N,文件2\u N+1)

在代码中,kbeg是FILE2的当前记录,kneed是所需的记录

这是需要倒带的地方,需要倒带文件2以获得N-1,以便进行后续的N+1(文件1)计算。我的问题是这个倒带被证明是最大的瓶颈,我试图通过实现这个IF语句来进行退格来加速它(在我修改之前,只有ELSE部分中的语句存在,“+6”在那里,因为我的文件在记录开始之前有一个6行的头)

问题是:现在我做了这个更改,退格似乎加快了进程,但现在当我读取FILE2记录时,数据与我刚刚使用REWIND函数时不同。这里的逻辑似乎很好,这是我第一次对FILE2这样做,但之后数据似乎是错误的

我想知道分段记录是否有什么需要注意的地方,以便退格正常工作。此外,我的膝盖和kbeg显示正确。唯一的问题是,当我将数据读入数组时,数据与仅存在回放功能时不同

我错过什么了吗


如果我需要提供更多信息,请告知我

segmented
是英特尔编译器的扩展。你确定你需要这个吗
access=“sequential”
可能就足够了。如果记录是固定长度的,您可以使用直接访问和以任何顺序读取记录。我需要分段标志,因为在大多数情况下,我不能在单个可变长度记录上包含数据。在我的数据示例中,不使用分段文件可以很好地工作,我实现的退格功能也可以工作。当我使用分段记录时,似乎存在退格问题,它似乎无法找到包含分段的“主”记录的开头。我想知道是否有任何控制我可以用来绕过这个问题。你的记录有多长?也许把他们分开。否则,这可能是英特尔的一个支持问题。