删除重复行,为什么速度慢,帮看下代码(已解决)
本帖最后由 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:33 编辑
看了半天还是不能明白楼主的具体意思,楼主所谓的删除重复行可是相邻行重复?
能否举个例子:处理前是怎样的文本,处理后的结果又是怎样的!
你说批处理更快一点,你的批处理完这数据要多长时间呢?
30M的文本,7个小时!挺有意思的哈
7个小时啊,效率绝对有问题
单从你的代码就可以看出问题,FileWriteLine绝对比FileWrite效率低的多!
我的意思是,你每处理一行就写进一行数据,这么大的文本效率可想而知
可能独到数组中再操作数组再写回文本好些 本帖最后由 binghc 于 2010-11-12 11:45 编辑
下面是我完整的代码(支持你说的不保留空行),你试试效率怎么样!
**** Hidden Message *****
本帖最后由 binghc 于 2010-11-12 12:45 编辑
没有批处理快,我试了下30多M七小时没处理完
我自己下载了一本小说。文本总大小为33.3M,我用自己的代码在2.5Ghz的电脑上测试了一下,非空行
286061行(28万多行),从读取文件到写入删除重复行后的文件,总共耗时6032毫秒,也就是说
33.3M的文本,其中有28万多行的非空行,提取其中的非重复行,整个过程只用了6秒钟!对比楼主说的7个小时~,而且7个小时还没处理完。
这~效率实在~~~!!!
{:face (456):}学习下。 学习下你的效率代码 学习了,马上试效果 回复 5# binghc
重复的行可能是不相邻的,binghc兄4#的代码貌似只处理相邻的行。 回复 1# nbmpe
处理的不是相邻的相数数据,原来是从原TXT中最后一行开始读取,和新文本中每一行做比较,如果新文本中没出现在过一次就把这一行写入新文本中,至于FILEWRITE我这没大数据的文档,试不出来,明天试下。 LZ弄个范本岂不更好 _ _|| 本帖最后由 binghc 于 2010-11-12 18:29 编辑
回复 10# nbmpe
那你的意思是否这样:要处理的文件A是以另外一个文件B为参照(以“行”为基本单位),现在所要做的就是删除所有A文件中B文件里出现过的“行”?
建议楼主还是举个例子,贴几张图,这样会更清楚 回复 9# pusofalse
没错,这里处理的就是相邻的行,本人现在正在研究删除相邻“段”,之后会放出源码。。。
有兴趣的话敬请关注 ABC
ABC
AA
AAC
DD 本帖最后由 binghc 于 2010-11-12 19:23 编辑
回复 14# nbmpe
还是不能明白楼主的意思。
现在我想知道你的初始文件有几个,最后的结果文件是怎样,还是截几张图上来吧
你这个例子,我上面的代码就能处理