nbmpe 发表于 2010-11-12 09:09:00

删除重复行,为什么速度慢,帮看下代码(已解决)

本帖最后由 nbmpe 于 2010-11-14 12:49 编辑

帮看下,下面的代码有什么不对,没有批处理快,我试了下30多M七小时没处理完
另帮解释一下这句。 if not defined %%i set %%i=A & echo %%i>>str_.txtinclude <File.au3>
$aFile = "11.5.txt"
$bFile = "t.txt"
For $i = _FileCountLines($aFile) to 1 Step -1

      $x = FileReadLine($aFile, $i)
                If $i = _FileCountLines($aFile) ThenFileWriteLine($bFile,$x)
                $z = 0
                For $h = _FileCountLines($bFile) to 1 Step -1

                        $y = FileReadLine($bFile, $h)
                        If $x = $y Then $h = 1
                        If $x <> $y Then $z = $z+1
                        If $z = _FileCountLines($bFile) Then
                                FileWriteLine($bFile,$x)
                                $h = 1
                        EndIf       
                Next       
               
Next
MsgBox(0, 0,"fdsf")

#cs
@echo off
:: 删除重复的行,但不能保留空行
:: 对不符合变量命名规则、变量个数超过限制的文本都无法正确处理
::
(echo 清除重复行后的文件内容:& echo.)>str_.txt
for /f "delims=" %%i in (test.txt) do (
    if not defined %%i set %%i=A & echo %%i>>str_.txt)
start str_.txt

#ce

binghc 发表于 2010-11-12 10:18:39

本帖最后由 binghc 于 2010-11-12 10:33 编辑


看了半天还是不能明白楼主的具体意思,楼主所谓的删除重复行可是相邻行重复?

能否举个例子:处理前是怎样的文本,处理后的结果又是怎样的!

你说批处理更快一点,你的批处理完这数据要多长时间呢?

30M的文本,7个小时!挺有意思的哈

7个小时啊,效率绝对有问题

单从你的代码就可以看出问题,FileWriteLine绝对比FileWrite效率低的多!

我的意思是,你每处理一行就写进一行数据,这么大的文本效率可想而知

karlpopper 发表于 2010-11-12 10:29:03

可能独到数组中再操作数组再写回文本好些

binghc 发表于 2010-11-12 10:47:46

本帖最后由 binghc 于 2010-11-12 11:45 编辑

下面是我完整的代码(支持你说的不保留空行),你试试效率怎么样!

**** Hidden Message *****


         

binghc 发表于 2010-11-12 12:42:29

本帖最后由 binghc 于 2010-11-12 12:45 编辑

没有批处理快,我试了下30多M七小时没处理完


我自己下载了一本小说。文本总大小为33.3M,我用自己的代码在2.5Ghz的电脑上测试了一下,非空行

286061行(28万多行),从读取文件到写入删除重复行后的文件,总共耗时6032毫秒,也就是说

33.3M的文本,其中有28万多行的非空行,提取其中的非重复行,整个过程只用了6秒钟!对比楼主说的7个小时~,而且7个小时还没处理完。

这~效率实在~~~!!!



病毒专收员 发表于 2010-11-12 15:21:22

{:face (456):}学习下。

shenrenba 发表于 2010-11-12 16:00:29

学习下你的效率代码

nbmpe 发表于 2010-11-12 16:52:45

学习了,马上试效果

pusofalse 发表于 2010-11-12 16:58:34

回复 5# binghc


    重复的行可能是不相邻的,binghc兄4#的代码貌似只处理相邻的行。

nbmpe 发表于 2010-11-12 17:08:25

回复 1# nbmpe
处理的不是相邻的相数数据,原来是从原TXT中最后一行开始读取,和新文本中每一行做比较,如果新文本中没出现在过一次就把这一行写入新文本中,至于FILEWRITE我这没大数据的文档,试不出来,明天试下。

afan 发表于 2010-11-12 17:09:53

LZ弄个范本岂不更好 _ _||

binghc 发表于 2010-11-12 18:28:20

本帖最后由 binghc 于 2010-11-12 18:29 编辑

回复 10# nbmpe


那你的意思是否这样:要处理的文件A是以另外一个文件B为参照(以“行”为基本单位),现在所要做的就是删除所有A文件中B文件里出现过的“行”?

建议楼主还是举个例子,贴几张图,这样会更清楚

binghc 发表于 2010-11-12 18:34:52

回复 9# pusofalse


    没错,这里处理的就是相邻的行,本人现在正在研究删除相邻“段”,之后会放出源码。。。

有兴趣的话敬请关注

nbmpe 发表于 2010-11-12 18:42:35

ABC
ABC
AA
AAC
DD

binghc 发表于 2010-11-12 19:19:35

本帖最后由 binghc 于 2010-11-12 19:23 编辑

回复 14# nbmpe


    还是不能明白楼主的意思。

现在我想知道你的初始文件有几个,最后的结果文件是怎样,还是截几张图上来吧

你这个例子,我上面的代码就能处理
页: [1] 2 3 4 5 6 7 8
查看完整版本: 删除重复行,为什么速度慢,帮看下代码(已解决)