主题:fortran语言删除文本中的重复行
xo_shi
[专家分:0] 发布于 2010-04-29 16:23:00
解报后生成了一个文本文件,但是因为报文的重复记录,导致解报后文本文件中较多行有重复。请问如何用fortran语言删除重复行?(只用fortran语言)
解报后生成的文本文件大致是下面格式。文本大约有30万行,然后我采取从一个文件顺序读出然后选择判断读入另一文件的方法,效果是我那台机器运行了八个多小时。
能不能有更好地方法呢?
............
20080601.00 44532 98
20080601.00 57532 91
.............
20080601.00 44532 98
.............
20080601.00 44532 98
.............
最后更新于:2010-04-30 08:35:00
回复列表 (共7个回复)
沙发
xiaoliu420 [专家分:20] 发布于 2010-05-02 16:18:00
期待ing[em10]
板凳
zinsser_1982 [专家分:400] 发布于 2010-05-03 10:05:00
你耗费的时间应该主要花费在判断上,所以可以设计比较好的数据结构减少判断次数。比较简单的一种方法是利用链表结构对于读进来的数据进行排序,每读一新的数据都与之前排好序的结果进行比较判断,这样就可以大大降低次判断次数,速度自然就快了。
3 楼
lxde0866 [专家分:480] 发布于 2010-05-04 22:39:00
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 楼
xo_shi [专家分:0] 发布于 2010-05-13 22:42:00
谢谢
请问2楼指的是指针吗?
但关键是怎么进行有效的判断呢?
5 楼
xo_shi [专家分:0] 发布于 2010-05-13 22:50:00
谢谢3楼的同志
我写的跟您的很像,比如30万行,都需交叉做30万行的循环
如果文本每行字符较少的话,速度可以提高
6 楼
xxxfuiq [专家分:0] 发布于 2010-05-15 08:29:00
这种活儿不适合用Fortran
7 楼
xo_shi [专家分:0] 发布于 2010-05-15 09:59:00
呵呵,主要是方向内fortran语言计算用的较多的缘故。
比如说Unix中的文本编辑可以一下子可以解决,好像c解决这种事情也很方便
但是对c是不熟悉的,只看得懂代码,写还是很麻烦的问题,而且也不常用c
我来回复