Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Как сравнить два текстовых файла и выявить изменения

Ответить
Настройки темы
[решено] Как сравнить два текстовых файла и выявить изменения

Пользователь


Сообщения: 62
Благодарности: 0

Профиль | Отправить PM | Цитировать


С помощью этой быстрой функции (Спасибо Креатору) список файлов на диске С получился и записался в текстовый файл
за одну секунду если быть точным Time: 1.185 получилось 22000 строк тоесть 22000 файлов
Если проинсталировать какую нибудь програмку то получится например 22100 строк.
Всё это делается очень даже очень быстро.

А вот как получить текстовый файл со списком файлов только что ставших на диск С
То есть сравнить эти два файла
и выявить изменения
или убрать дубликаты?
с этим проблема.

Код этой функции

Код: Выделить весь код
#Include <File.au3>

Global $Array = ""

_FindFiles('C:', '*')

$Txt = FileOpen('1.txt' ,2)

FileWrite($Txt, $Array)
FileClose($Txt)

Func _FindFiles($sRoot, $sFile)

    Local $FileList

    $FileList = _FileListToArray($sRoot, $sFile, 0)
	
    If Not @error Then
        For $i = 1 To $FileList[0]
           
			$Array &= $sRoot & '\' & $FileList[$i] & @CRLF
		Next
    EndIf
	
    $FileList = _FileListToArray($sRoot, '*', 2)
    If Not @error Then
        For $i = 1 To $FileList[0]
            _FindFiles($sRoot & '\' & $FileList[$i], $sFile)
        Next
    EndIf

EndFunc

Отправлено: 17:43, 03-09-2010

 

Пользователь


Сообщения: 62
Благодарности: 0

Профиль | Отправить PM | Цитировать


Функция для сравнения двух текстовых файлов.
Не большое дополнение : если не установлен Framework v2.0. эта функция работать не будет.

Код: Выделить весь код
#Include <File.au3>
#include <Array.au3>

Global $Test1 = "Test1.txt"
Global $Test2 = "Test2.txt"
Global $aReturn
Global $aReturn_2
Global $sFilePath1 = '1.txt'
Global $sFilePath2 = '2.txt'
_FileReadToArray($sFilePath1, $aReturn)
_FileReadToArray($sFilePath2, $aReturn_2)
$Differece1 = _Diff($aReturn_2, $aReturn) ; первое сравнение при увеличении количества файлов
$Differece2 = _Diff($aReturn, $aReturn_2) ; второе сравнение при уменьшении количества файлов
$File1 = FileOpen($Test1, 1)
FileClose($File1)
_FileWriteFromArray($Test1, $Differece1, 1)   ;записывает в Test1.txt добавленные (разницу) файлы
$File2 = FileOpen($Test2, 1)
FileClose($File2)
_FileWriteFromArray($Test2, $Differece2, 1)   ;записывает в Test2.txt удалённые  файлы

Func _Diff(ByRef $Set1, ByRef $Set2, $GetAll = 0, $Delim = Default)
    Local $o1 = ObjCreate("System.Collections.ArrayList")
    Local $o2 = ObjCreate("System.Collections.ArrayList")
    Local $oUnion = ObjCreate("System.Collections.ArrayList")
    Local $oDiff1 = ObjCreate("System.Collections.ArrayList")
    Local $oDiff2 = ObjCreate("System.Collections.ArrayList")
    Local $tmp, $i
    If $GetAll <> 1 Then $GetAll = 0
    If $Delim = Default Then $Delim = Opt("GUIDataSeparatorChar")
    If Not IsArray($Set1) Then
        If Not StringInStr($Set1, $Delim) Then
            $o1.Add($Set1)
        Else
            $tmp = StringSplit($Set1, $Delim, 1)
            For $i = 1 To UBound($tmp) - 1
                $o1.Add($tmp[$i])
            Next
        EndIf
    Else
        If UBound($Set1, 0) > 1 Then Return SetError(1, 0, -1)
        For $i = 0 To UBound($Set1) - 1
            $o1.Add($Set1[$i])
        Next
    EndIf
    If Not IsArray($Set2) Then
        If Not StringInStr($Set2, $Delim) Then
            $o2.Add($Set2)
        Else
            $tmp = StringSplit($Set2, $Delim, 1)
            For $i = 1 To UBound($tmp) - 1
                $o2.Add($tmp[$i])
            Next
        EndIf
    Else
        If UBound($Set2, 0) > 1 Then Return SetError(1, 0, -1)
        For $i = 0 To UBound($Set2) - 1
            $o2.Add($Set2[$i])
        Next
    EndIf
    For $tmp In $o1
        If $o2.Contains($tmp) And Not $oUnion.Contains($tmp) Then $oUnion.Add($tmp)
    Next
    For $tmp In $o1
        If $GetAll Then
            If Not $oUnion.Contains($tmp) Then $oDiff1.Add($tmp)
        Else
            If Not $oUnion.Contains($tmp) And Not $oDiff1.Contains($tmp) Then $oDiff1.Add($tmp)
        EndIf
    Next


    If $oDiff1.Count <= 0 Then Return 0

    Local $aOut[$oDiff1.Count]
    $i = 0
    For $tmp In $oDiff1
        $aOut[$i] = $tmp
        $i += 1
    Next
    Return $aOut
EndFunc

Последний раз редактировалось assch, 23-04-2012 в 01:41.


Отправлено: 23:25, 09-09-2010 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Как сравнить два текстовых файла и выявить изменения

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Подскажите как получить время изменения файла -15 минут osp2008 Скриптовые языки администрирования Windows 7 29-07-2010 15:04
CMD/BAT - Обработать два текстовых файла в одном цикле: как? grinsen Скриптовые языки администрирования Windows 1 27-02-2010 03:33
Разное - [решено] Как сравнить два файла средствами windows? nvhost Microsoft Windows 2000/XP 4 25-04-2009 12:09
[решено] Не удается сравнить два файла D_Master AutoIt 3 29-03-2009 18:10
как сравнить два звуковых файла alexra Видео и аудио: обработка и кодирование 8 31-07-2007 00:42




 
Переход