ЧАСТЬ 1. МЕТОДЫ (26).
1.1. Базовые методы (10). Независимые, построены на своих простых алгоритмах.
Стр_Дополнить() (дополнение справа-слева указанными символами).
Стр_Инверс () ( инверсия – символы справа на лево).
Стр_Коды() (коды символов через ”,” и массив с кодами)
Стр_Символы() (строка из кодов через ”,” или из массива с кодами)
Стр_ЗаменитьСимволы() (замена одних символов на другие).
Стр_ИзМассива() (строка из массива фрагментов через разделитель)
Стр_НайтиВх() ( поиск подстроки (в т.ч справа) с указ. номером вхождения).
Стр_НайтиГр() (Поиск группы символов, входящих в указанный набор символов)
Стр_НайтиЧисл() (Поиск числа , в т. ч справа с указанным номером вхождения)
Стр_Интерпретировать() (в массив, согласно установленному синтаксису)
1.2. Производные методы (12). Собственно, это применение четырёх обобщенных методов-алгоритмов (см. Часть 2)
Стр_Число() (с начала и с конца строки, не ”боиться” нецифровых символов.
Стр_Найти() ( поиск подстроки (в т.ч без учета регистра и справа) с указ. номером вхождения).
Стр_Заменить() (искать ( в т.ч. без учета регистра и справа), и заменять подстроки-разделители ).
Стр_Кусок() (кусок строки между указанными вхождениями разделителя (слева или справа)).
Стр_ЗаменитьКусок() (замена в исходной строке ”куска ” на указанную строку).
Стр_ВМассив() (между указанными вхождениями разделителя (в т.ч. справа и без регистра).
Стр_ПеренестиПоСлогам() (разбить на подстроки ”Жёстко”, с дефисом).
Стр_ПеренестиПоСловам() (разбить на подстроки “Мягко” )
Стр_Разрезать() (“Разрезать” на подстроки указанных длин)
Стр_СокрЛ() (заменить лев. группу «сокращаемых» символов на «строку замены»
Стр_СокрП() (заменить прав. группу «сокращаемых» символов на «строку замены»
Стр_СокрС() (заменить посредине группы «сокращаемых» символов на «строку замены»
Стр_Расширить (расширение до указ. длины за счет увеличения колич. указанных символов)
1.3. Детализованные методы (3). «Препарирование» строки с переносом в таблицу с детальной информацией.
Стр_вТаблВх() (в таблицу согласно системе вложенных разделителей).
Стр_вТаблГр (в таблицу согласно многоуровневому фильтру ).
Стр_вТаблЧисел (в таблицу с числами и фрагментами между ними).
ЧАСТЬ 2. ОБОБЩЕННЫЕ МЕТОДЫ-АЛГОРИМЫ (3).
Стр_Вхождение() (методы ”Найти” и ”Заменить”).
Стр_Фрагменты() (методы ”Кусок”,”ЗаменитьКусок,”ВМассив”,”вТаблВх”).
Стр_Сокр () (методы «СокрЛ»,»СокрП»,»СокрС»,»Расширить”.
Стр_Разбить() (методы “ПеренестиПоСлогам”,”ПеренестиПоСловам”,”Разрезать”).
ЧАСТЬ 3. УНИВЕРСАЛЬНАЯ ФУНКЦИЯ .
Это своего рода условный программный интерфейс, позволяющий
применять к строке сразу несколько методов. Реализован в виде
функции с семью параметрами («Демо» построено на этой функции):
Стр_(Методы, Подметоды, Вход, Парам1, Парам2, Длины_Номера_Позиции, ДопВыход)
Параметры:
— ” Методы” — несколько ”совмещаемых” и (или) один “монопольный” метод
(односимвольные коды или названия, можно через «,»)
— ”Подметоды” — несколько ”совмещаемых” и(или) “монопольный ” варианты
“монопольного” метода (односимвольные коды или названия);
— “Вход” — Строка, или Массив или Таблица значений;
— “Парам1” – строка поиска, замещения, разделители, фильтры;
— “Парам2” — замещающая строка или символы;
— “Длины_Номера_Позиции ” -Число, Числа через разделитель или массив с Числами;
— “ДопВыход ” — Число или Строка или Массив или Таблица значений;
Имена и(или) односимвольные Коды методов-подметодов , а также числа в
(Длины_Номера_Позиции ) могут быть в любом регистре и отделены
любым из следующих разделителей: ”, :;”.
ЧАСТЬ 4. НЕКОТОРЫЕ ПРИМЕРЫ.
ЕстьЧислаВСтроке=(Стр_НайтиЧисл(ВхСтрока)<>Неопределено);
ЕстьЦифрыВСтроке=(Стр_НайтиГр(ВхСтрока,»+0123456789″)>0);
ЕстьЛатиница=(Стр_НайтиГр(ВхСтр, Стр_Интерпретировать(«lL»))>0);
ЕстьУказанныеЗнаки=(Стр_НнайтиГр(ВхСтр, «+к рогЮ.0р9»)>0);
ЕстьНеПечатные=(Стр_НайтиГр(ВхСтр, Стр_Интерпретировать(«-l-L-р-Р-П-З-Ц»))>0);
ЧАСТЬ 5. ЗАКЛЮЧЕНИЕ.
Где возможно, обходился одним проходом по строке. Второй проход — обычно уже по фрагментам. Не пользовался встроенной функцией СтрЧислоВхождений().
Использованы встроенные функции : Лев(),Прав()Сред(),СтрДлина()
— (позиционирование и получение части строки -должны быть «быстрыми»).
жесть
Чтобы позиционирование и работа с фрагментом строки на больших текстах были быстрыми, надо регулярными выражениями пользоваться, ага.
(2) Yashazz,Эту COMу (регулярные выражения) встраивать в рабочие CONFы никак нельзя! Не выдержан основной принцип: 200% подтвержденная надёжность (100% от друзей+100% от врагов).А уж кроссплатформенность…
(2) Yashazz,
(3) Высосанные из пальца принципы
Человек можно сказать «выстрадал» свои _методы_ и хотел поделиться с нами, а вы его ни за что, ни про что обкакали!
Лучше бы стебались над афтарами, плодящими каждый месяц абсолютно «новую» СФ1137 и прочую лабуду в виде печатных форм…
Идея интересная, но получившиеся в результате инструменты отражают специфику задач автора.
Например, 1) мне никогда не требовалась инверсия строки; 2)в случае необходимости мне по затратам времени проще ее написать самому, а не обращаться к чужой библиотеке.
Показанная в примере функция эффектна, но не эффективна…
Про библиотеку в целом, могу сказать то же самое.
На примере задачи, которую когда-то решал, продемонстрирую:
ДАНО:
Разложить в структуру все возможные поля из строки описания запроса 1С от оператора ВЫБРАТЬ, до оператора ИЗ, корректно обрабатывая пакет запросов, исключая создание временных таблиц и их уничтожение. Если нет наименования поля, то создать наиболее подходящее из выражения.
Возможный вариант:
ВЫБРАТЬ РАЗЛИЧНЫЕ
… КАК Код,
ВЫБОР Когда НЕ Цены.Номенклатура ССЫЛКА Справочник.Номенклатура ТОГДА ЗНАЧЕНИЕ(Справочник.Материалы.ПустаяСсылка) КОГДА ЕСТЬNULL(Товары.Наименование,»Нет наименования»)=»» ИЛИ ЕСТЬNULL( Товары.Наименование , «Нет наименования» ) = «Нет наименования» Тогда ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка) ИНАЧЕ ВЫБОР КОГДА ЕСТЬNULL(Товары.Наименование, «Нет наименования») =»Товар № 1″ ТОГДА ЗНАЧЕНИЕ(Справочник.Номенклатура.ТоварПервый) Иначе Товары.Ссылка Конец КОНЕЦ,
СРЕДНЕЕ(Цены.Цена)+1000 * ( 1/(100.01* 10)),
…
ИЗ
РегистрыСведений.Цены КАК Цены ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Товары Цены ПО Товары.Номенклатура=Цены.Номенклатура ЛЕВОЕ СОЕДИНЕНИЕ …
Есть попроще задачи, есть посложнее, но очевидно, что нереально использовать вашу библиотеку для решения практической задачи, когда в строке нарушено форматирование и имеется более одного разделителя разных приоритетов и вложенных структур. Поправлюсь: вашу библиотеку использовать можно, но не проще чем встроенную, а в целях не снижения производительности, лучше не применять вообще.
(5) oleg_km, шутки понимать надо.
(8) ksuman,Слегка не по теме. Методы отнюдь не предназначены для анализа строки запроса. Их 26, на многие другие случаи жизни. Большинство не реализовано в стандартных конфигурация, приходиться писать.
Предложенная библиотека в помощь.
P.S. Можно, конечно добавить методы работы с «раскрывающими» и «закрывающими» разделителями — тогда можно
и запросы анализировать, да незачем это. Есть уже, да и по «XML»,например, масса отработанных методов.
В единой связке представлены методы, которых нет или расширены те, которые есть в стандартных конфигурациях.
Дамы и господа — не тюкайте больно! Большинство методов используются во многих языках высокого уровня — наверное не напрасно.
А такие методы как «Стр_НайтиГр()» и сопутствующие ему «Стр_Сокр()» и «Стр_Группировки()» позволяют по другому и гораздо шире
подойти к задачам поиска и замены групп различных символов в строке (например расширение методов «СокрЛ»,»СокрП»,метод «Стр_СокрС». В прилагаемом полном описании даны некоторые примеры). Простой эвристический метод «Стр_ПереносПоСлогам()», вроде
не разу меня не подвёл.Также и поиск чисел.
Не стоит и забывать, что методы работают как слева, так и справа, с учётом и без учёта регистра символов.
Хорошей вам работы и настроения!
Очень специфические функции
Не хватает самих текстов функций. С ними статья была бы интереснее.
Не хватает функции определения «Номера Вхождения» по «Номеру позиции» «Подстроки поиска».