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

Показать сообщение отдельно

Ветеран


Contributor


Сообщения: 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