VBS Выводить сообщение, каких файлов не хватает

josh

Новый пользователь
Сообщения
19
Реакции
0
Баллы
11
В Diff_result нужно вывести те строки которые отсутствуют в log1_08_2016 по сравнению с эталоном. с датами все правильно.
 

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,131
Реакции
5,904
Баллы
648

josh

Новый пользователь
Сообщения
19
Реакции
0
Баллы
11
Скрипт не дает в результирующем файле не достающих строк, а просто подставляет актуальную дату в строки эталонного файла.
 

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,131
Реакции
5,904
Баллы
648
Сперва подставляет, а затем сравнивает с помощью объекта Scripting.Dictionary
Это естественно, что у Вас в результаты попадают все строки, у Вас ведь в исходном файле стоит не сегодняшняя дата.
 

josh

Новый пользователь
Сообщения
19
Реакции
0
Баллы
11
Подставил сегодняшнюю дата все равно попали все. Удалил исходник попали тоже все.
 

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,131
Реакции
5,904
Баллы
648
Простите, забыл удалить скриптом нумерацию в файле-исходнике.
Изначально рассчитывал, что вы вообще не будете читать скриптом исходный файл, а напрямую возьмёте массив s() из своего скрипта.

Вообщем вот исправленный вариант, если делать скрипт как самостоятельный:

VB.NET:
'Источник
'sSrcFile = "C:\scripts\log\log1_"& d & "_" & m & "_" & Year(Date) & ".txt"
sScrFile = "C:\Users\tfcor\Desktop\12\log1_08_2016.txt"

'Эталон
sEtalonFile = "C:\Users\tfcor\Desktop\12\ЭТАЛОН_log_02_08_2016.txt"

'Файл-разницы (для записи)
sDiffFile = "C:\Users\tfcor\Desktop\12\Diff_result.txt"

Set oFSO = CreateObject("Scripting.FileSystemObject")

'Чтение файла-этолона
Set oTS = oFSO.OpenTextFile(sEtalonFile, 1, False)
    sEtaAll = oTS.ReadAll()
oTS.Close

'Нормализация путей эталона

' \DD.MM.YYYY\
sCurDate1 = "\" & Right("0" & Day(Now), 2) & "." & Right("0" & Month(Now), 2) & "." & Year(Now) & "\"
' MM_DD
sCurDate2 = Right("0" & Month(Now), 2) & "_" & Right("0" & Day(Now), 2)

Set oRegExp = CreateObject("VBScript.RegExp")
oRegExp.Global = True
oRegExp.MultiLine = True

'замена даты
oRegExp.Pattern = "\\\d{2}\.\d{2}\.\d{4}\\"
sEtaAll = oRegExp.Replace(sEtaAll, sCurDate1)

'удаление нумерации
oRegExp.Pattern = "^\d{1,3}\.\s*"
sEtaAll = oRegExp.Replace(sEtaAll, "")

'замена даты в окончании имени файла
oRegExp.Pattern = "(\d{2}_\d{2})(\..*?)?$"
sEtaAll = oRegExp.Replace(sEtaAll, sCurDate2 & "$2")

aEta = Split(sEtaAll, vbCrLf)

Set oDict = CreateObject("Scripting.Dictionary")
oDict.CompareMode = 1
For i = 0 To UBound(aEta)
    If Len(aEta(i)) <> 0 Then
        If Not oDict.Exists(aEta(i)) Then oDict.Add aEta(i), 0
    End If
Next

'Чтение файла-источника
Set oTS = oFSO.OpenTextFile(sScrFile, 1, False)
    sSrcAll = oTS.ReadAll()
    'удаление нумерации
    oRegExp.Pattern = "^\d{1,3}\.\s*"
    sSrcAll = oRegExp.Replace(sSrcAll, "")
  
    aSrc = Split(sSrcAll, vbCrLf)
oTS.Close

For i = 0 To UBound(aSrc)
    If oDict.Exists(aSrc(i)) Then oDict.Remove (aSrc(i))
Next

If oDict.Count <> 0 Then
    Set oTS = oFSO.OpenTextFile(sDiffFile, 2, True)
    For Each Key In oDict.Keys
        oTS.WriteLine (Key)
    Next
    oTS.Close
End If
В эталоне 98 файлов (после переименования 2 из них идентичны).
В источнике - 2 файла с сегодняшней датой.
После обработки - разница - 95 файлов.

Полный архив:
 

Вложения

Сверху Снизу