andreitrane
Новичок
- Сообщения
- 141
- Репутация
- 3
помогите ускорить работу скрипта для удаления дублирующихся строк
просто мой скрипт просматривает 1млн строк примерно за 4 мин с лишним, а есть ДупКилл, который этот же 1млн строк смотрит за 1 сек...
просто мой скрипт просматривает 1млн строк примерно за 4 мин с лишним, а есть ДупКилл, который этот же 1млн строк смотрит за 1 сек...
Код:
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <ProgressConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$tdkForm = GUICreate("TextDuplikatKiller maniakk mod", 457, 258, 180, 120)
$textfromfilebtn = GUICtrlCreateButton("Из файла", 8, 8, 73, 25)
$textin = GUICtrlCreateEdit("", 8, 40, 217, 209, BitOR($GUI_SS_DEFAULT_EDIT,$ES_READONLY))
$textout = GUICtrlCreateEdit("", 232, 40, 217, 209, BitOR($GUI_SS_DEFAULT_EDIT,$ES_READONLY))
$tdkstart = GUICtrlCreateButton("Начать", 88, 8, 73, 25)
$tdkProgress = GUICtrlCreateProgress(168, 8, 281, 25)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $textfromfilebtn
_textfromfile()
Case $tdkstart
_tdkstart()
if $dupnum > 0 Then
MsgBox(0, "", "Удалено "& $dupnum &" повторяющихся строк"&@CRLF&"сохранено в "&$text&"_no dups.txt")
ElseIf $dupnum = 0 Then
MsgBox(0, "", "Нет повторяющихся строк")
EndIf
EndSwitch
WEnd
Func _textfromfile()
Global $text = FileOpenDialog("Указать файл", @WorkingDir & "", "Любой (*.txt)", 1 + 4 )
Global $Readch = FileRead($text)
if $Readch Then
GUICtrlSetData($textin,$Readch)
EndIf
EndFunc
Func _tdkstart()
Global $nodup = ""
Global $dupnum = 0
$textstr = StringSplit(StringStripCR(GUICtrlRead($textin)), @LF)
For $itdk = 1 to $textstr[0]
GUICtrlSetData($tdkProgress, Round($itdk*(100/$textstr[0])))
If $textstr[$itdk] = "" then ContinueLoop
if not StringInStr($nodup, $textstr[$itdk]&@CRLF) Then
$nodup &= $textstr[$itdk]&@CRLF
GUICtrlSetData($textout, $textstr[$itdk]&@CRLF,@CRLF)
Else
$dupnum += 1
EndIf
Next
FileWrite($text&"_no dups.txt", $nodup)
EndFunc