找回密码
 加入
搜索
查看: 7954|回复: 21

[效率算法] 在一个文本下,判断数据重复!

  [复制链接]
发表于 2011-6-21 20:49:28 | 显示全部楼层 |阅读模式
附件中是一个游戏的数据库我读出来写在一个txt的文本里,因为经常有冲突的数据,手动排查真的挺费时间,而且有很多这种情况。在数据库里操作可能会读取上万次数据库,所以导出txt文本想从文本下手。

自己在写代码对比的过程中有些迷茫,不想生成临时文件,也就是说不借助第三个文件的情况下,对比是否有冲突的路径。

有的话,则列出游戏的ID,名称,路径。

自己用_FileCountLines一行一行的读取,再每行对比,这样感觉效率低下,程序要运行挺长时间,如果再大点的数据库,那就不敢想象了。

希望同志们给些思路,代码我自己来写,谢谢。

本帖子中包含更多资源

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

×
发表于 2011-6-21 21:39:20 | 显示全部楼层
给你一个三M的代码借鉴效率还可以
#include <File.au3>

$aFile = FileOpenDialog("快速删除重复行",@ScriptDir&"","文本文件 (*.txt)", 1 + 4)
If @error Then 
        MsgBox(0,0,"文件未选择",3)
        Exit
EndIf
$begin = TimerInit()
Local $str='',$file_array
_FileReadToArray($aFile,$file_array)
;_ArrayDisplay($file_array)
For $i = 1 To UBound($file_array)-1
        $temp=$file_array[$i]
        If Not IsDeclared($temp) Then
                Assign($temp, $i)               
                $str&=$temp&@CRLF
        EndIf
Next
$dif = TimerDiff($begin)
        $out_file=StringTrimRight($aFile,4)&'_已完成.txt'
        if FileExists($out_file) then FileDelete($out_file)
        FileWrite($out_file,$str)
        ShellExecute($out_file)
        WinWaitActive("[CLASS:Notepad]")
        WinSetTitle("[CLASS:Notepad]", "", '处理'&UBound($file_array)&'行'&'     用时'&int($dif)&'毫秒')
Exit
 楼主| 发表于 2011-6-21 22:31:04 | 显示全部楼层
感谢,我先消化一下,谢谢。
 楼主| 发表于 2011-6-21 23:01:34 | 显示全部楼层
感谢,我先消化一下,谢谢。
 楼主| 发表于 2011-6-21 23:02:45 | 显示全部楼层
回复 2# love5173


    IsDeclared的作用检测变量是否被赋值,莫非以前赋过的值,IsDeclared就判定为相当于没赋值过?
发表于 2011-6-22 10:40:23 | 显示全部楼层
IsDeclared 是声明 ,是判断前面是否出现过用的,就是过滤重复的关键地方
 楼主| 发表于 2011-6-22 12:43:25 | 显示全部楼层
回复 6# love5173


    了解,我这边再测试,谢谢。
 楼主| 发表于 2011-6-22 13:20:35 | 显示全部楼层
回复 6# love5173
#include <File.au3>

$aFile = FileOpenDialog("快速删除重复行", @ScriptDir & "", "文本文件 (*.txt)", 1 + 4)
If @error Then
        MsgBox(0, 0, "文件未选择", 3)
        Exit
EndIf
$begin = TimerInit()
Local $str = '', $file_array
_FileReadToArray($aFile, $file_array)
For $i = 1 To UBound($file_array) - 1
        $SS = StringSplit($file_array[$i], '&')
        $temp = $SS[3]
        If Not IsDeclared($temp) Then
                Assign($temp, $i)
                $str &= $SS[1] & '&' & $SS[2] & $temp & @CRLF
        Else
                FileWriteLine('2.txt', $SS[1] & "_" & $SS[2] & '_' & $SS[3] & '                重复数据')
        EndIf
Next
用附件中的1.txt自己测试了一下,无法记录第一次声明这个变量的记录。。不知道是否有办法。
看了你的列子,又不想读到txt文件对比了,想直接在数据库里操作。
您给的代码真的很受教。

本帖子中包含更多资源

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

×
发表于 2011-6-22 15:31:13 | 显示全部楼层
在数据库查找重复数据不是很简单的吗?
 楼主| 发表于 2011-6-22 15:43:14 | 显示全部楼层
回复 9# auto


    关键需要查找的数据并不是固定值,是在数据库中的一些数据,需要先将所有数据遍历一边,再进行对比。
发表于 2011-6-22 15:56:02 | 显示全部楼层
不固定的值,也可以找出重复出来
方便提供数据库看看
 楼主| 发表于 2011-6-22 16:05:14 | 显示全部楼层


已提供数据库,我刻意修改了一个路径冲突的地方,在Package的表下

本帖子中包含更多资源

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

×
发表于 2011-6-22 16:15:40 | 显示全部楼层
本帖最后由 auto 于 2011-6-22 16:54 编辑

重复指那些字段重复?
是否找出Package.PkgName, Package.LocalPath 重复吗?
对应的ID、PkgName、LocalPath???
 楼主| 发表于 2011-6-22 16:59:41 | 显示全部楼层
Package表下的LocalPatch下边的数据,是否有重复,如果重复,列出重复值一行的 PkgId 和PkgName
发表于 2011-6-22 17:02:14 | 显示全部楼层
LocalPatch 为空如何处理?该字段有很多空值
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-1 23:59 , Processed in 0.088698 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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