回 帖 发 新 帖 刷新版面

主题:fortran语言删除文本中的重复行


 解报后生成了一个文本文件,但是因为报文的重复记录,导致解报后文本文件中较多行有重复。请问如何用fortran语言删除重复行?(只用fortran语言)
解报后生成的文本文件大致是下面格式。文本大约有30万行,然后我采取从一个文件顺序读出然后选择判断读入另一文件的方法,效果是我那台机器运行了八个多小时。
能不能有更好地方法呢?

   ............
   20080601.00  44532  98 
   20080601.00  57532  91
   .............
   20080601.00  44532  98 
   .............
   20080601.00  44532  98 
   .............

回复列表 (共7个回复)

沙发


期待ing[em10]

板凳


你耗费的时间应该主要花费在判断上,所以可以设计比较好的数据结构减少判断次数。比较简单的一种方法是利用链表结构对于读进来的数据进行排序,每读一新的数据都与之前排好序的结果进行比较判断,这样就可以大大降低次判断次数,速度自然就快了。

3 楼


    character aa(1000000)*256,bb*256
    dimension idd(1000000) 
    open(1,file='text.txt',status='old')
    icc=0
1    continue 
    read(1,'(a)'.,end=2,err=1) bb*256 
    icc=icc+1 
    aa(icc)(1:256)=bb(1:256) 
2   continue 
    idd(1)=0
    do 10 i=1,icc-1
    do 20 j=i+1,icc
    idd(j)=0
    if(aa(i)(1:256).eq.aa(j)(1:256)) idd(j)=1
20  continue 
10  continue 
    do 30 i=1,icc 
    if(idd(i).eq.1) goto 30 
    write(*,'(A)') aa(i)
30  continue 
    end

4 楼

谢谢
请问2楼指的是指针吗?
但关键是怎么进行有效的判断呢?

5 楼

谢谢3楼的同志
我写的跟您的很像,比如30万行,都需交叉做30万行的循环
如果文本每行字符较少的话,速度可以提高

6 楼

这种活儿不适合用Fortran

7 楼

呵呵,主要是方向内fortran语言计算用的较多的缘故。
比如说Unix中的文本编辑可以一下子可以解决,好像c解决这种事情也很方便
但是对c是不熟悉的,只看得懂代码,写还是很麻烦的问题,而且也不常用c

我来回复

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