sergeinovilozf
Новичок
- Сообщения
- 51
- Репутация
- 0
Здравствуйте.
Здесь на сайте нашёл код.Работает.
Вот написал,намного проще:
Тоже удаляет дубли из цифр и текста.Зачем такой грамоздкий в первом случае?И через поисковик ничего кроме первого тогда не нашёл.Может второй вариант в каких-то случаях не сработает?
Здесь на сайте нашёл код.Работает.
Код:
$sFileName = "1.txt"
$sFilePath = @ScriptDir & "\"
$sFile = $sFilePath & $sFileName
$iRet = _FileDeleteDuplicateLines($sFile, 0)
$iExtended = @extended
If $iRet = 1 And $iExtended > 0 Then
MsgBox(64, "Results", StringFormat("В файле <%s> удалено дублирующихся строк: %i", $sFileName, $iExtended))
ElseIf $iExtended = 0 Then
MsgBox(64, "Results", StringFormat("В файле <%s> нет дублирующихся строк.", $sFileName))
ElseIf @error = 1 Then
MsgBox(48, "Ошибка", StringFormat("Файл <%s> не найден.", $sFileName))
ElseIf @error = 2 Then
MsgBox(48, "Ошибка", StringFormat("Ошибка при попытке записи в Файл <%s>.", $sFileName))
EndIf
Func _FileDeleteDuplicateLines($sFile, $iCaseSense=0)
If Not FileExists($sFile) Then Return SetError(1)
Local $sFRead = FileRead($sFile)
Local $aFSplit = StringSplit(StringStripCR($sFRead), @LF)
Local $sFileContent = "", $iExtended = 0, $sLastChars = StringRight($sFRead, 2)
;Проходим весь массив, и проверяем каждую строку
For $i = 1 To $aFSplit[0]
If $aFSplit[$i] = "" Then ContinueLoop
;Тут делаем проверку в переменной, в которую скапливаются строки (не дублирующиеся)
If Not StringInStr($sFileContent, $aFSplit[$i] & @CRLF, $iCaseSense) Then
$sFileContent &= $aFSplit[$i] & @CRLF
Else
$iExtended += 1
EndIf
Next
If $sLastChars <> @CRLF Then $sFileContent = StringTrimRight($sFileContent, 2)
;Пишем в файл уже без дублей
Local $hFOpen = FileOpen($sFile, 2)
If $hFOpen = -1 Then Return SetError(2)
FileWrite($hFOpen, $sFileContent)
FileClose($hFOpen)
Return SetExtended($iExtended, 1)
EndFunc
Вот написал,намного проще:
Код:
#include <File.au3>;
$strok=_FileCountLines("1.txt"); количество строк в файле 1
$i = 1;
While $i <= $strok;
;--------------------
$t = 1;
While $t <= $strok;
;----------
$nomer1 = FileReadLine ( "1.txt", $i); считывает строку из файла
$nomer2 = FileReadLine ( "1.txt", $t); считывает строку из файла
If ($nomer1=$nomer2 And $i<>$t) Then _FileWriteToLine("1.txt", $t, "", 1);
;----------
$t = $t + 1
WEnd
;--------------------
$i = $i + 1
WEnd
Тоже удаляет дубли из цифр и текста.Зачем такой грамоздкий в первом случае?И через поисковик ничего кроме первого тогда не нашёл.Может второй вариант в каких-то случаях не сработает?