找回密码
 加入
搜索
查看: 61081|回复: 118

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

 火... [复制链接]
发表于 2010-11-12 09:09:00 | 显示全部楼层 |阅读模式
本帖最后由 nbmpe 于 2010-11-14 12:49 编辑

帮看下,下面的代码有什么不对,没有批处理快,我试了下30多M七小时没处理完
另帮解释一下这句。 if not defined %%i set %%i=A & echo %%i>>str_.txt
include <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) Then  FileWriteLine($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
发表于 2010-11-12 10:18:39 | 显示全部楼层
本帖最后由 binghc 于 2010-11-12 10:33 编辑


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

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

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

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

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

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

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

评分

参与人数 1金钱 +30 收起 理由
afan + 30

查看全部评分

发表于 2010-11-12 10:29:03 | 显示全部楼层
可能独到数组中再操作数组再写回文本好些
发表于 2010-11-12 10:47:46 | 显示全部楼层
本帖最后由 binghc 于 2010-11-12 11:45 编辑

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

游客,如果您要查看本帖隐藏内容请回复



         

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 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 | 显示全部楼层
学习下。
发表于 2010-11-12 16:00:29 | 显示全部楼层
学习下你的效率代码
 楼主| 发表于 2010-11-12 16:52:45 | 显示全部楼层
学习了,马上试效果
发表于 2010-11-12 16:58:34 | 显示全部楼层
回复 5# binghc


    重复的行可能是不相邻的,binghc兄4#的代码貌似只处理相邻的行。
 楼主| 发表于 2010-11-12 17:08:25 | 显示全部楼层
回复 1# nbmpe
处理的不是相邻的相数数据,原来是从原TXT中最后一行开始读取,和新文本中每一行做比较,如果新文本中没出现在过一次就把这一行写入新文本中,至于FILEWRITE我这没大数据的文档,试不出来,明天试下。
发表于 2010-11-12 17:09:53 | 显示全部楼层
LZ弄个范本岂不更好 _ _||
发表于 2010-11-12 18:28:20 | 显示全部楼层
本帖最后由 binghc 于 2010-11-12 18:29 编辑

回复 10# nbmpe


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

建议楼主还是举个例子,贴几张图,这样会更清楚
发表于 2010-11-12 18:34:52 | 显示全部楼层
回复 9# pusofalse


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

有兴趣的话敬请关注
 楼主| 发表于 2010-11-12 18:42:35 | 显示全部楼层
ABC
ABC
AA
AAC
DD
发表于 2010-11-12 19:19:35 | 显示全部楼层
本帖最后由 binghc 于 2010-11-12 19:23 编辑

回复 14# nbmpe


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

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

你这个例子,我上面的代码就能处理
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-15 07:11 , Processed in 0.087944 second(s), 28 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表