Ветеран
Сообщения: 2703
Благодарности: 1683
|
Профиль
|
Отправить PM
| Цитировать
Rey71,
VBS. Немного оффтоп, считаю, что ошибка занимает всю строку целиком. Для удобства вывел ошибку в заголовок сформированного файла.
Отельным файлом с номером 0000 выдал список ошибок и номера файла, где они фигурируют
Код:
FileIn = "Z:\Box_In\Errors\исходный файл.TXT"
' FileIn = "Z:\Box_In\Errors\obraz.TXT"
BoxOut = "Z:\Box_In\Errors"
Set FSO = CreateObject("Scripting.FileSystemObject")
On Error Resume Next
Set fIn = FSO.OpenTextFile(FileIn, 1, False)
If Err.Number <> 0 Then
MsgBox "Ошибка при открытии" + vbCrLf + FileIn + vbCrLf + vbCrLf + Err.Description
WScript.Quit 2
End If
On Error GoTo 0
Alls = fIn.ReadAll
fIn.Close
MasAll = Split(Alls, vbCrLf)
MasN = Split(Alls, "#")
A0 = LBound(MasAll)
AN = UBound(MasAll)
N0 = LBound(MasN)
NN = UBound(MasN)
Set Alls = Nothing
ReDim MasErr(AN)
ie = A0 - 1
For Each s In MasAll
If Not Len(Replace(s, " ", "")) = 0 Then
If Not Mid(s, 1, 1) = "#" Then
If ie = A0 - 1 Then
ie = A0
MasErr(ie) = s
Else
L = 0
For i = A0 To ie
If s = MasErr(i) Then
L = 1
Exit For
End If
Next
If L = 0 Then
ie = ie + 1
MasErr(ie) = s
End If
End If
End If
End If
Next
DNow = Date
sNow = Mid(CStr(Year(DNow)), 3, 2) + Mid(CStr(Month(DNow) + 100), 2, 2) + Mid(CStr(Day(DNow) + 100), 2, 2)
DNow = Time
sNow = sNow + Mid(CStr(Hour(DNow) + 100), 2, 2) + Mid(CStr(Minute(DNow) + 100), 2, 2) + Mid(CStr(Second(DNow) + 100), 2, 2)
nFile = 10000
On Error Resume Next
Set fErr = FSO.CreateTextFile(BoxOut + "\" + sNow + "_" + Mid(CStr(nFile), 2) + ".txt", True)
If Err.Number <> 0 Then
MsgBox "Ошибка при создании" + vbCrLf + vbCrLf + BoxOut + "\" + sNow + "_" + Mid(CStr(nFile), 2) + ".txt" + vbCrLf + Err.Description
WScript.Quit 2
End If
For Each s In MasErr
nFile = nFile + 1
If nFile - 10000 > ie + 1 - A0 Then Exit For
On Error Resume Next
Set fOut = FSO.CreateTextFile(BoxOut + "\" + sNow + "_" + Mid(CStr(nFile), 2) + ".txt", True)
If Err.Number <> 0 Then
MsgBox "Ошибка при создании" + vbCrLf + vbCrLf + BoxOut + "\" + sNow + "_" + Mid(CStr(nFile), 2) + ".txt" + vbCrLf + Err.Description
WScript.Quit 2
End If
fErr.WriteLine Mid(CStr(nFile), 2) + " " + s
fOut.Write "=== Ошибка " + s + vbCrLf + vbCrLf
On Error GoTo 0
For Each block In MasN
If Not Len(Replace(Replace(block, vbCrLf, ""), " ", "")) = 0 Then
If InStr(1, block, s) <> 0 Then
fOut.Write "#" + block
End If
End If
Next
fOut.Close
Next
fErr.Close
MsgBox "Скрипт завершен"
|
-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.
Последний раз редактировалось megaloman, 23-01-2019 в 21:27.
Отправлено: 19:42, 23-01-2019
| #25
|