回 帖 发 新 帖 刷新版面

主题:[讨论]请教文件读取问题:如何用read语句跳行直接读取?

对于数据量大的文件,例如只要读取100001行以后的数据,100001行以前的数据需要跳过,我目前的做法是:
  do i=1,100000
     read(100,*)    !100为数据文件
  enddo

 对于批量处理,这种方法读取速度较慢。
 如果能用read语句跳行,直接从100001行开始读数,那应该快许多。请问各位高手,这种想法能实现吗?
  十分感谢!

回复列表 (共16个回复)

11 楼

補充:
用編譯器ftn95試了一下
他的recl須定為 recl = 64
也許是不包含0dx,0ax這兩個字元
可以試試看是否可行

12 楼

再次感谢liangrong兄。
调试的时候把recl=64,还是出现相同错误。因此猜测是编译器的原因。

13 楼

不同编译器对RECL=M中的解释是不同的,有的是解释为长度M,有的是解释为长度M*4

14 楼

我用CVF6.6试了,3楼方法正确,我按3楼设置 RECL=66,因为要算行末的换行+回车。

如果楼主有问题,那可能是因为没有设置字节长度为1
Project->Settings->Fortran下
下拉菜单选择 Fortran Data
在 Data Options 中勾选 Use Bytes as RECL= unit for Unformatted Files
不过我把这个取消重新编译也没有出现楼主的错误,数据仍能正确读出。

可能是数据中每行的格式不一样才出现这个错误,楼主可以在读入后立即输出检查
  read (100,600,rec=j)k,disp_part(j,1),disp_part(j,2),disp_part(j,3);
  write(*,*)k,disp_part(j,1),disp_part(j,2),disp_part(j,3);
如果一个也没有读入那就是格式有问题,如果读到一部分出错,那就是数据文件有问题。

15 楼

如果我换成想把第10000行后面的值改成其他的数据,输出形式也和原形式一样,那又要如何使用write语句?请老师赐教,谢谢

16 楼

14楼的兄弟真是高人呀,您这招这灵,十分感谢!

我来回复

您尚未登录,请登录后再回复。点此登录或注册