nmgwddj 发表于 2011-6-21 20:49:28

在一个文本下,判断数据重复!

附件中是一个游戏的数据库我读出来写在一个txt的文本里,因为经常有冲突的数据,手动排查真的挺费时间,而且有很多这种情况。在数据库里操作可能会读取上万次数据库,所以导出txt文本想从文本下手。

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

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

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

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

love5173 发表于 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("")
      WinSetTitle("", "", '处理'&UBound($file_array)&'行'&'   用时'&int($dif)&'毫秒')
Exit

nmgwddj 发表于 2011-6-21 22:31:04

感谢,我先消化一下,谢谢。

nmgwddj 发表于 2011-6-21 23:01:34

感谢,我先消化一下,谢谢。

nmgwddj 发表于 2011-6-21 23:02:45

回复 2# love5173


    IsDeclared的作用检测变量是否被赋值,莫非以前赋过的值,IsDeclared就判定为相当于没赋值过?

love5173 发表于 2011-6-22 10:40:23

IsDeclared 是声明 ,是判断前面是否出现过用的,就是过滤重复的关键地方

nmgwddj 发表于 2011-6-22 12:43:25

回复 6# love5173


    了解,我这边再测试,谢谢。

nmgwddj 发表于 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
        If Not IsDeclared($temp) Then
                Assign($temp, $i)
                $str &= $SS & '&' & $SS & $temp & @CRLF
        Else
                FileWriteLine('2.txt', $SS & "_" & $SS & '_' & $SS & '                重复数据')
        EndIf
Next用附件中的1.txt自己测试了一下,无法记录第一次声明这个变量的记录。。不知道是否有办法。
看了你的列子,又不想读到txt文件对比了,想直接在数据库里操作。
您给的代码真的很受教。

auto 发表于 2011-6-22 15:31:13

在数据库查找重复数据不是很简单的吗?

nmgwddj 发表于 2011-6-22 15:43:14

回复 9# auto


    关键需要查找的数据并不是固定值,是在数据库中的一些数据,需要先将所有数据遍历一边,再进行对比。

auto 发表于 2011-6-22 15:56:02

不固定的值,也可以找出重复出来
方便提供数据库看看

nmgwddj 发表于 2011-6-22 16:05:14



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

auto 发表于 2011-6-22 16:15:40

本帖最后由 auto 于 2011-6-22 16:54 编辑

重复指那些字段重复?
是否找出Package.PkgName, Package.LocalPath 重复吗?
对应的ID、PkgName、LocalPath???

nmgwddj 发表于 2011-6-22 16:59:41

Package表下的LocalPatch下边的数据,是否有重复,如果重复,列出重复值一行的 PkgId 和PkgName

auto 发表于 2011-6-22 17:02:14

LocalPatch 为空如何处理?该字段有很多空值
页: [1] 2
查看完整版本: 在一个文本下,判断数据重复!