Строка. Методы работы со строкой на языке 1с8.

04.08.16

Разработка - Универсальные функции

26 методов.  Там, где это может быть востребовано, методы работают как слева, так и справа, с учетом и без  учета регистра символов. Многие методы  имеют дополнительный выход со вспомогательной информацией.

Скачать файлы

Наименование Файл Версия Размер
МетодыРаботыСоСтрокой_Демо
.zip 81,64Kb
30
.zip 81,64Kb 30 Скачать

ЧАСТЬ  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.  ЗАКЛЮЧЕНИЕ.

 

Где возможно, обходился одним проходом по строке. Второй проход - обычно уже по фрагментам. Не пользовался встроенной  функцией  СтрЧислоВхождений().

Использованы  встроенные  функции :  Лев(),Прав()Сред(),СтрДлина()

- (позиционирование и получение части строки -должны быть "быстрыми").

См. также

Вставляем картинку из буфера обмена (платформа 1С 8.3.24)

Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Задача: вставить картинку из буфера обмена на форму средствами платформы 1С.

1 стартмани

18.03.2024    2653    0    John_d    8    

53

GUID в 1С 8.3 - как с ними быть

Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Пришлось помучиться с GUID-ами немного, решил поделиться опытом, мало ли кому пригодится.

12.02.2024    4589    atdonya    22    

44

Переоткрытие внешних обработок

Универсальные функции Платформа 1С v8.3 Бесплатно (free)

На заключительных этапах, когда идет отладка или доработка интерфейса, необходимо много раз переоткрыть внешний объект. Вот один из способов автоматизации этого.

30.11.2023    3950    ke.92@mail.ru    16    

61

Валидация JSON через XDTO (включая массивы)

WEB-интеграция Универсальные функции Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    8797    YA_418728146    6    

141

Печать непроведенных документов для УТ, КА, ERP. Настройка печати по пользователям, документам и печатным формам

Пакетная печать Печатные формы Адаптация типовых решений Универсальные функции Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Абонемент ($m)

Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.

2 стартмани

22.08.2023    2069    21    progmaster    7    

3

Расширение: Быстрые отборы через буфер [Alt+C] Копировать список, [Alt+V] Вставить список, [Ctrl+C] Копировать из файлов

Инструментарий разработчика Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 1С:Розница 2 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)

Копирует в буфер значения из списков, из ячеек отчетов, таблиц, настроек списков, других отборов и вставляет в выбранную настройку отбора. Работает с Объект не найден. Работает как в одной так и между разными базами 1С. Использует комбинации [Alt+C] Копировать список, [Alt+V] Вставить список. Также для копирования данных используется стандартная [Ctrl+C] (например из открытого xls, mxl, doc и т.п. файла скопировать список наименований)

1 стартмани

13.10.2022    16138    133    sapervodichka    112    

129

Система контроля ведения учета [БСП]

Универсальные функции Механизмы типовых конфигураций БСП (Библиотека стандартных подсистем) Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

В данном материале рассмотрим типовой алгоритм подсистемы контроля учета БСП в конфигурациях на примерах.

18.07.2022    7241    quazare    8    

109
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Adeptus 225 23.04.14 15:54 Сейчас в теме
2. Yashazz 4709 23.04.14 18:50 Сейчас в теме
Чтобы позиционирование и работа с фрагментом строки на больших текстах были быстрыми, надо регулярными выражениями пользоваться, ага.
3. newold2 124 24.04.14 10:41 Сейчас в теме
(2) Yashazz,Эту COMу (регулярные выражения) встраивать в рабочие CONFы никак нельзя! Не выдержан основной принцип: 200% подтвержденная надёжность (100% от друзей+100% от врагов).А уж кроссплатформенность...
5. oleg_km 30.04.14 09:18 Сейчас в теме
(3) Высосанные из пальца принципы
9. newold2 124 05.05.14 12:29 Сейчас в теме
(5) oleg_km, шутки понимать надо.
4. newold2 124 24.04.14 10:55 Сейчас в теме
6. fomix 33 30.04.14 16:57 Сейчас в теме
Человек можно сказать "выстрадал" свои _методы_ и хотел поделиться с нами, а вы его ни за что, ни про что обкакали!
Лучше бы стебались над афтарами, плодящими каждый месяц абсолютно "новую" СФ1137 и прочую лабуду в виде печатных форм...
eeeio; dsv_nsk; +2 Ответить
7. dsv_nsk 01.05.14 07:59 Сейчас в теме
Идея интересная, но получившиеся в результате инструменты отражают специфику задач автора.
Например, 1) мне никогда не требовалась инверсия строки; 2)в случае необходимости мне по затратам времени проще ее написать самому, а не обращаться к чужой библиотеке.
8. ksuman 17 01.05.14 12:34 Сейчас в теме
Показанная в примере функция эффектна, но не эффективна...
Про библиотеку в целом, могу сказать то же самое.

На примере задачи, которую когда-то решал, продемонстрирую:
ДАНО:
Разложить в структуру все возможные поля из строки описания запроса 1С от оператора ВЫБРАТЬ, до оператора ИЗ, корректно обрабатывая пакет запросов, исключая создание временных таблиц и их уничтожение. Если нет наименования поля, то создать наиболее подходящее из выражения.

Возможный вариант:
ВЫБРАТЬ РАЗЛИЧНЫЕ
... КАК Код,
ВЫБОР Когда НЕ Цены.Номенклатура ССЫЛКА Справочник.Номенклатура ТОГДА ЗНАЧЕНИЕ(Справочник.Материалы.ПустаяСсылка) КОГДА ЕСТЬNULL(Товары.Наименование,"Нет наименования")="" ИЛИ ЕСТЬNULL( Товары.Наименование , "Нет наименования" ) = "Нет наименования" Тогда ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка) ИНАЧЕ ВЫБОР КОГДА ЕСТЬNULL(Товары.Наименование, "Нет наименования") ="Товар № 1" ТОГДА ЗНАЧЕНИЕ(Справочник.Номенклатура.ТоварПервый) Иначе Товары.Ссылка Конец КОНЕЦ,
СРЕДНЕЕ(Цены.Цена)+1000 * ( 1/(100.01* 10)),
...
ИЗ
РегистрыСведений.Цены КАК Цены ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Товары Цены ПО Товары.Номенклатура=Цены.Номенклатура ЛЕВОЕ СОЕДИНЕНИЕ ...

Есть попроще задачи, есть посложнее, но очевидно, что нереально использовать вашу библиотеку для решения практической задачи, когда в строке нарушено форматирование и имеется более одного разделителя разных приоритетов и вложенных структур. Поправлюсь: вашу библиотеку использовать можно, но не проще чем встроенную, а в целях не снижения производительности, лучше не применять вообще.
10. newold2 124 05.05.14 12:35 Сейчас в теме
(8) ksuman,Слегка не по теме. Методы отнюдь не предназначены для анализа строки запроса. Их 26, на многие другие случаи жизни. Большинство не реализовано в стандартных конфигурация, приходиться писать.
Предложенная библиотека в помощь.
P.S. Можно, конечно добавить методы работы с "раскрывающими" и "закрывающими" разделителями - тогда можно
и запросы анализировать, да незачем это. Есть уже, да и по "XML",например, масса отработанных методов.
В единой связке представлены методы, которых нет или расширены те, которые есть в стандартных конфигурациях.
11. newold2 124 05.05.14 13:16 Сейчас в теме
Дамы и господа - не тюкайте больно! Большинство методов используются во многих языках высокого уровня - наверное не напрасно.
А такие методы как "Стр_НайтиГр()" и сопутствующие ему "Стр_Сокр()" и "Стр_Группировки()" позволяют по другому и гораздо шире
подойти к задачам поиска и замены групп различных символов в строке (например расширение методов "СокрЛ","СокрП",метод "Стр_СокрС". В прилагаемом полном описании даны некоторые примеры). Простой эвристический метод "Стр_ПереносПоСлогам()", вроде
не разу меня не подвёл.Также и поиск чисел.
Не стоит и забывать, что методы работают как слева, так и справа, с учётом и без учёта регистра символов.
Хорошей вам работы и настроения!
12. chmv 11.08.14 09:03 Сейчас в теме
Очень специфические функции
13. ildarovich 7850 04.08.16 09:23 Сейчас в теме
Не хватает самих текстов функций. С ними статья была бы интереснее.
14. JohnPawn 335 08.11.18 12:01 Сейчас в теме
Не хватает функции определения "Номера Вхождения" по "Номеру позиции" "Подстроки поиска".
Оставьте свое сообщение