Профессиональные приемы работы в Microsoft Excel

Обмен опытом => Microsoft Excel => Тема начата: Бриз _ от 20.11.2009, 23:50

Название: Поиск ошибок в текстовом документе с помощью Excel
Отправлено: Бриз _ от 20.11.2009, 23:50
Здравствуйте!
Имеется текстовой документ с данными (образец прилагаю), которые записываются в него с помощью сторонней программы. Программа иногда выдает сбои и тогда данные записываются в тхт. файл с ошибками. Что в дальнейшем мешает их обработке, при импорте в сводную таблицу.
Необходимо с помощью Excel вычислить строки с ошибками в тхт. файле и удалить их. Как это делать  - не очень хорошо представляю, а точнее не знаю))). Сама обработка и удаление может происходить в Excel, но окончательный вариант должен быть таким, чтобы можно было все скопировать и вставить обратно в тхт. файл (можно скопировать и ручками). Подскажите, пожалуйста вариант решения!
Образец правильной записи в тхт. файле:
Где: Урал, Татарский яр:На что поймана: Моллюск:Белуга:1543,858:кг
Где: Урал, Татарский яр:На что поймана: Моллюск:Белуга:1665,12:кг
Где: Амур, Богачёво:На что поймана: Крабовое мясо:Троегуб:303:гр
Где: Якутия, р. Агаякан, приток Индигирки:На что поймана: Tvis-102:Щука:1,745:кг
Где: Якутия, р. Кубюме.:На что поймана: Circl-5055:Щука:5,23:кг
Где: Якутия, Речка Буор-Юрях.:На что поймана: Vob-3014:Хариус Сибирский:313:гр
Где: Нева, Локация л.Шмидта:На что поймана: Vob-3014:Щука:1,6:кг
Где: Нева, Локация л.Шмидта:На что поймана: Ручейник:Плотва:90:гр
Где: Волга, с.Переволоки:На что поймана: Червь:Густера:165:гр
Где: Селигер, р. Княжа:На что поймана: Червь:Плотва:1,754:кг
Где: Селигер, Кравотыньский Наволок:На что поймана: Червь:Плотва:349:гр
Где: Урал, Розовый перекат:На что поймана: Лягушка:Сом:533,294:кг
Где: Урал, Татарский яр:На что поймана: Моллюск:Белуга:534,004:кг
Где: Нева, Мост Свободы:На что поймана: живец:Сом:542,026:кг
Где: Амур, Протока бешеная - огороды:На что поймана: Tvis-105:Сом Солдатова:546,263:кг

Образец ОШИБОЧНОЙ записи в тхт. файле:
::Озерная форель:327:гр
::Ручьевая форель:462:гр
::Ручьевая форель:232:гр
::Севанская форель:262:гр
Где: Амур, Богачёво:На что поймана: Перловка::219:гр.
Где: Красивая меча, Островок:На что поймана: Мотыль:Вес: 1,242 кг:1,242:кг

Т.е. получается, что в правильной записи (строка) используется шесть двоеточий для разделения данных – не больше и не меньше. В ошибочных строках число двоеточий больше или меньше шести. А если и равно шести, то между какой-то одной парой двоеточий отсутствуют данные  (Где: Амур, Богачёво:На что поймана: Перловка::219:гр.)
Может это нужно использовать при проверке? Повторюсь, что ошибочные строки не следует приводить в соответствии с правильным стандартом  - их можно просто удалить насовсем.

Файл для обработки прилагаю во вложении.
Название: Re: Поиск ошибок в текстовом документе с помощью Excel
Отправлено: kimtan от 21.11.2009, 01:42
Оставил 1500 строк, дабы уменьшить размер файла.
Два доп.столбца для улучшения производительности (в 10 раз)
Название: Re: Поиск ошибок в текстовом документе с помощью Excel
Отправлено: С.М. от 21.11.2009, 02:07

Sub Удалить_строки_с_ошибками()
    Dim Rng As Range, Cell As Range, XRng As Range
    Dim TxtArr, Txt
    Dim N As Long
    '
    Set Rng = Range("A1").CurrentRegion.Columns(1)
    Set XRng = Rng.Cells(Rng.Rows.Count + 1, 1)
    For Each Cell In Rng.Cells
        TxtArr = Split(CStr(Cell.Value), ":")
        If UBound(TxtArr) = 6 Then
            For Each Txt In TxtArr
                If Trim(Txt) = "" Then Set XRng = Union(XRng, Cell)
            Next
        Else
            Set XRng = Union(XRng, Cell)
        End If
    Next
    N = XRng.Cells.Count - 1
    If N > 0 Then
        If MsgBox("Найдено " & N & " ошибочных записей." _
        & vbCr & "Удалить строки с ошибками ?", vbYesNo, "") = vbNo Then Exit Sub
        XRng.Rows.Delete xlShiftUp
    Else
        MsgBox "Ошибочных записей нет.", , ""
    End If
End Sub
Название: Re: Поиск ошибок в текстовом документе с помощью Excel
Отправлено: Бриз _ от 21.11.2009, 07:54
 kimtan и С.М. огромное спасибо, что откликнулись и помогли!!!
Попробовал оба варианта, макрос все же работает немного шустрее. Ошибок в обработке тоже пока не нашел. Но обнаружилось, что существуют еще ошибочные записи (они из других модов игры):

неправильно - Где: Волхов, Грозовые тучи:На что поймана: Tvis-106 №2:Сом:3,507:кг
   правильно - Где: Волхов, Грозовые тучи:На что поймана: Tvis-106:Сом:3,507:кг

т.е. в названии приманки должен отсутствовать >> №2  <<, есть еще №1 и №3.
Можно ли добавить в документ поиск и удаление этих ошибочных строк?
Название: Re: Поиск ошибок в текстовом документе с помощью Excel
Отправлено: С.М. от 21.11.2009, 13:58
            For Each Txt In TxtArr
                If Trim(Txt) = "" Then
                    Set XRng = Union(XRng, Cell)
                ElseIf Trim(Txt) Like "*№#" Then
                    Set XRng = Union(XRng, Cell)
                End If
            Next