Господа, добрый день. Возникла следующая ситуация: необходимо построчно читать хтмл и искать артикулы в нем, в виде 1234/6452, т.е. по 4 цифры через слеш. Всегда делал стандартными средствами, типа Лев, прав и стрЗаменить, решил перейти на регулярные выражения, т.к. исходный хтмл очень кривой.
Не могу понять, что я делаю не так. Таблица значений не заполняется.
Если писать вместо такое , то понятное дело, что колонка Артикул принимает значения COMОбъект.
Не могу понять, что я делаю не так. Таблица значений не заполняется.
ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("Артикул");
Текст = Новый ТекстовыйДокумент;
Текст.Прочитать("C:\Users\*****\Desktop\BT.htm");
RegExp = Новый COMОбъект("VBScript.RegExp");
RegExp.MultiLine = Истина;
RegExp.Global = Истина;
RegExp.IgnoreCase = Истина;
RegExp.Pattern = "[0-9]{4}/[0-9]{4}";
Совпадения = RegExp.Execute(Текст.ПолучитьТекст());
Для Каждого Совпадение Из Совпадения Цикл
НовСтр = ТЗ.Добавить();
ЗаполнитьЗначенияСвойств(НовСтр.Артикул, Совпадение);
КонецЦикла;
ПоказатьЕсли писать вместо
ЗаполнитьЗначенияСвойств(НовСтр.Артикул, Совпадение);
НовСтр.Артикул = Совпадения;
По теме из базы знаний
- Практика регулярных выражений в 1С или "парсим неудобные форматы"
- Функция проверки валидности e-mail с использованием регулярных выражений RegExp (7.7)
- Регулярные выражения – это просто. Построитель и отладчик регулярных выражений
- Использование регулярных выражений (RegExp) в Linux
- Простой тестер регулярных выражений 1С
Найденные решения
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Заработала следующая конструкция
Сч = 0;
Пока Совпадения.Count() > сч Цикл
Match = Совпадения.Item(Сч);
НовСтр = ТЗ.Добавить();
НовСтр.Артикул = Match.Value;
//Сообщить(Match.Value);
Сч = Сч + 1;
КонецЦикла;
Показать
(7) Но цикл выполняется в коде 1С, а не в объекте RegExp. Компилятор 1С ничего не знает о том, что результат этого выражения не меняется, он видит вызов метода объекта и генерирует исполняемый код этого вызова. Поэтому я очень сильно подозреваю, что метод Count() будет вызываться и выражение Count()-1 будет вычисляться на каждом проходе цикла.
(8)
будет вычисляться на каждом проходе цикла
Это свойство объекта, оно уже хранится в памяти, поэтому вычисляться ему не нужно. При этом цикл в 1С запоминает значение, что легко проверяется следующим кодом:
Функция ПолучитьКоличество()
Сообщить("Получем кол-во!");
Возврат 10
КонецФункции
&НаКлиенте
Процедура Hey(Команда)
а = 0;
Для F = 0 ПО ПолучитьКоличество()-1 Цикл
а = а + 1;
КонецЦикла;
Сообщить(а);
КонецПроцедуры
ПоказатьПрикрепленные файлы:
Внимание! Тема сдана в архив
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот