Здравствуйте!
Имеется текстовой документ с данными (образец прилагаю), которые записываются в него с помощью сторонней программы. Программа иногда выдает сбои и тогда данные записываются в тхт. файл с ошибками. Что в дальнейшем мешает их обработке, при импорте в сводную таблицу.
Необходимо с помощью 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:гр.)
Может это нужно использовать при проверке? Повторюсь, что ошибочные строки не следует приводить в соответствии с правильным стандартом - их можно просто удалить насовсем.
Файл для обработки прилагаю во вложении.
Оставил 1500 строк, дабы уменьшить размер файла.
Два доп.столбца для улучшения производительности (в 10 раз)
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
kimtan и С.М. огромное спасибо, что откликнулись и помогли!!!
Попробовал оба варианта, макрос все же работает немного шустрее. Ошибок в обработке тоже пока не нашел. Но обнаружилось, что существуют еще ошибочные записи (они из других модов игры):
неправильно - Где: Волхов, Грозовые тучи:На что поймана: Tvis-106 №2:Сом:3,507:кг
правильно - Где: Волхов, Грозовые тучи:На что поймана: Tvis-106:Сом:3,507:кг
т.е. в названии приманки должен отсутствовать >> №2 <<, есть еще №1 и №3.
Можно ли добавить в документ поиск и удаление этих ошибочных строк?
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