1С 8.x : Функция разбора (разложения) строки в массив
Данные функции позволяют разложить строку в массив, используя заданный разделитель
Например есть строка: абв$dfd$232$-0oj$5
Выполнив код: НашМассив = РазложитьСтрокуВМассив(абв$dfd$232$-0oj$5, "$") ;
Получим: НашМассив = абв
dfd
232
-0oj
5
Пример с использованием предустановленной библиотеки RegExp, т.е. она есть в любом windows.
Плюсы RegExp:
1. Хорошая скорость анализа, т.к. 1С анализ строк (разбор) обычно реализуется циклами и функциями: Лев, Прав, Сред, Найти, а встроенный язык медленный
2. Высокая читаемость и модифицированность (более предсказуем в случае несоответствия строки - разбору)
3. Дополнительный функционал (можно осуществлять анализ, замену и проверку строковых выражений)
Минусы RegExp:
1. Не все задачи можно решить (например рекурсивные разборы тип 1 + (2+3*(2-7)) в случае если нужно разобрать на выражения в скобках) приходится смешивать с кодом.
2. Возможность зависания при использовании сложных шаблонов(редкость, но бывает).
3. RegExp - это дополнительная библиотека и инициализация занимает значительное время.
Выбор оптимального алгоритма для разбора строки в массив 0 Столкнулся с проблемой: ПолучитьСтрокуПоНомеру() медленно отрабатывает на входных данных 100 000 строк. Как сделать бытсрее?
// Пример Defender aka LINN
ВремяНачала = ТекущаяДата();
Сообщить(" Обработка начата: " + ВремяНачала);
ТЗ = Новый ТаИспользование регулярных выражений (RegExp) в 1С 1 Регулярные выражения (Regular Expressions) являются известным и мощным средством для поиска, тестирования и замены подстрок. Эта технология доступна и в 1С - через объект VBScript.RegExp. Нужный объект уже встроен в современные версии Windows (начинКак мы писали парсер сайта с ценами для 1С 1 Недавно, мой постоянный клиент решил проводить маркетинговые исследования по изменению цен на товары у конкурентов... и эти данные захотел использовать в 1С в связке с его прайс-листом + куча отчетов с графиками и процентным отклонением от цен основКак напечатать документ на определенном принтере из сеанса RDP (Терминал) 5 В 1С есть возможность обратиться к принтеру по имени перед печатью, однако при работе через терминал к названию принтера добавляется (перенаправлено N), где N постоянно меняется. Решение следующее:
НаКлиенте
Функция ИмяПринтераRDP(ИмяПринтера)
SКак проверить наличие русских букв в строке? 0 //рег=СоздатьОбъект(" VBScript.RegExp" ); // Для 7.7
Рег = Новый COMОбъект(" VBScript.RegExp" );
Рег.global=-1;
Рег.ignorecase=-1;
Рег.pattern=" " ;
Сообщить(Рег.test(" есть русские bukovy" ));
Сообщить(Рег.test(" netu russ bukov" )); Посмотреть все результаты поиска похожих
Более лаконичный способ разложить строку в массив.
Код 1с82:
Функция РазложитьСтрокуВМассив(ИсхСтрока, Разделитель =",") ВремМногострочнТекст = СтрЗаменить(ИсхСтрока, Разделитель, Символы.ПС); МассивСтрок = Новый Массив(); Для Счетчик = 1 По СтрЧислоСтрок(ВремМногострочнТекст) Цикл МассивСтрок.Добавить(СтрПолучитьСтроку(ВремМногострочнТекст, Счетчик)); КонецЦикла; Возврат МассивСтрок;КонецФункции