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

04.08.16

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

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

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
МетодыРаботыСоСтрокой_Демо
.zip 81,64Kb
31 2 500 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

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

 

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

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

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

Вступайте в нашу телеграмм-группу Инфостарт

См. также

Загрузка и выгрузка в Excel Универсальные функции Программист 1С:Предприятие 8 Россия Бесплатно (free)

Описанный ниже подход позволяет в три шага заполнять формулы в Excel файлы, вне зависимости от ОС сервера (MS Windows Server или Linux). Подход подразумевает отказ от работы с COM-объектом в пользу работы через "объектную модель документа" (DOM).

30.10.2025    3994    Abysswalker    10    

46

Универсальные функции Работа с интерфейсом Программист 1С:Предприятие 8 Бесплатно (free)

Порой необходимо временно отключить расширение 1С, не удаляя его, чтобы не потерять данные. Но в этом случае при каждом запуске всем будет лезть уведомление о неактивном расширении, хотя очевидно, это техническая информация, которой не стоит лишний раз пугать пользователей.

14.05.2025    7511    DeerCven    15    

61

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

Благодаря этим пяти строчкам можно больше не заморачиваться с загрузкой из внешних файлов. Пользуюсь везде, всегда и постоянно.

21.05.2024    52112    dimanich70    84    

174

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Абонемент ($m)

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

1 стартмани

18.03.2024    7624    7    John_d    13    

59

Универсальные функции Программист Стажер 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

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

12.02.2024    66283    atdonya    31    

71

Универсальные функции Программист 1С:Предприятие 8 Бесплатно (free)

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

30.11.2023    9511    ke.92@mail.ru    17    

68
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Adeptus 256 23.04.14 15:54 Сейчас в теме
2. Yashazz 4900 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 24 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 8049 04.08.16 09:23 Сейчас в теме
Не хватает самих текстов функций. С ними статья была бы интереснее.
14. JohnPawn 383 08.11.18 12:01 Сейчас в теме
Не хватает функции определения "Номера Вхождения" по "Номеру позиции" "Подстроки поиска".
Для отправки сообщения требуется регистрация/авторизация