Я не могу предоставить пример с макросом, поскольку еще пишу скелет. Текстовый файл, тоже особо смылса кидать нет.
Ситауция следующая, имеется текстовый файл, в который периодически идет поток данных, необходимо в определенное время(об OnTime Now и TimeSerial я осведомлен)
проверять пришли ли данные. С этого этапа принципиально может быть 3 ситуации развития событий:
1) Данные пришли какие надо, следствие этого идем далее
2) Данные пришли но с ошибкой, следствие этого необходимо закомментировать строку
3) Данные не пришли., пока данные не пришли циклим ждем прихода....
у данных есть две характерных особенности у них есть порядковый номер, и у них есть скажем так
"характерный номер обратной связи"который фактически является булевой переменной: Есть ошибка/нет ошибки.
Прошу прощения, что в принципе не правильно объявил тему, и что не задал сути вопроса в заглавном посте, до написания на форум, я был уверен в том что я ошибаюсь при работе с функцией .Find, и изначально предполагал, что тот нюанс который есть при работе с переменной у функции .Find который для более опытных товарищей очевиден, всплывет на поверхность.
Алгоритм такой :
1) открывай текстовый файл помещаем в переменную
2) в переменной ищем, наличие нового порядкового номера, если его нет закрываем файл, и открываем опять ( делаем это в цикле)
3) если он есть смотрим на
"характерный номер обратной связи", если ошибка есть комментим строку с ошибкой закрываем файл,
записываем ошибки в отдельный массив в Эксель ( грубо говоря в столбик)
Основное условие этого алгоритма пришли ли данные,
т.е. в итоге вопрос такой имеется
некая изначальная информация которую необходимо найти в текстовом файле, если использовать Instr
Это скелет в нем могут быть ошибки как грамматические в комментариях, так синтаксические в работе функции Instr,
так и алгоритмические.
Код |
---|
Sub Poisk_txt()
Dim s, Poisk, Nashli, Nashli//DC, Poisk//DC As String
Dim Count_mistake As Integer ' Счетчик ошибок
Open "C:\testfile.txt" For Input As #1
s = Input(LOF(1), 1) ' содержимое текстового файла в переменной строкового типа
Poisk = "4//" ' какой порядковый номер ищем
Poisk//DC = "4//DC//1//" ' порядковый номер и характерный номер обратной связи БЕЗ ОШИБКИ который ищем
Nashli = Instr(s, Poisk, 1) ' Непосредственно ищем, могу неправильно набрать, функция Instr похожа на ПоискПоз
'Do
If Nashli = Poisk Then ' If-1
Nashli//DC = Instr(s, Poisk//DC, 1)
If Nashli//DC = Poisk//DC Then ' If - 2
' 'это то что нужно, если значение IF = True то выходим из цикла
Else: Cells(Count_mistake, 7) = Poisk ' If - 2
Count_mistake = Count_mistake + 1
s = Replace(s, "4//", "*;4//")
Print #1, s
Close #1
Open #1
End If ' If - 2
Else ' If -1
Close #1
Open #1
End If ' If- 1
'Loop
End Sub |
Вопроса два если Instr или Find или Регулярные выражения ничего не найдут по заданному условию то будет ошибка
1) ошибку стоит проходить конструкцией
On Error Resume Next? или другой?
2) и второй момент как оптимальнее зациклить, просто бесконечный цикл? или что то более функциональное?
Прошу меня извинить что в самом начале так все не расписал.
Благодарю еще раз всех Вас.