Работа со строками

&НаСервере
// Определяет, является ли символ разделителем.
//
// Параметры:
//  КодСимвола      — Число  — код проверяемого символа;
//  РазделителиСлов — Строка — символы разделителей.
//
// Возвращаемое значение:
//  Булево — истина, если символ является разделителем.
//
Функция ЭтоРазделительСлов(КодСимвола, РазделителиСлов = Неопределено) Экспорт

Если РазделителиСлов <> Неопределено Тогда
Возврат 
Найти(РазделителиСлов, Символ(КодСимвола)) > 0;
КонецЕсли;

Диапазоны = Новый Массив;
Диапазоны.Добавить(Новый Структура(«Мин,Макс», 48, 57)); // цифры
Диапазоны.Добавить(Новый Структура(«Мин,Макс», 65, 90)); // латиница большие
Диапазоны.Добавить(Новый Структура(«Мин,Макс», 97, 122)); // латиница маленькие
Диапазоны.Добавить(Новый Структура(«Мин,Макс», 1040, 1103)); // кириллица
Диапазоны.Добавить(Новый Структура(«Мин,Макс», 1025, 1025)); // символ «Ё»
Диапазоны.Добавить(Новый Структура(«Мин,Макс», 1105, 1105)); // символ «ё»
Диапазоны.Добавить(Новый Структура(«Мин,Макс», 95, 95)); // символ «_»
Для Каждого Диапазон Из Диапазоны Цикл
Если 
КодСимвола >= Диапазон.Мин И КодСимвола <= Диапазон.Макс Тогда
Возврат Ложь;
КонецЕсли;
КонецЦикла;

Возврат Истина;

КонецФункции

&НаСервере
// Разбивает строку на несколько строк, используя заданный набор разделителей.
// Если параметр РазделителиСлов не задан, то разделителем слов считается любой из символов,
// не относящихся к символам латиницы, кириллицы, цифры, подчеркивания.
//
// Параметры:
//  Строка          — Строка — строка, которую необходимо разложить на слова.
//  РазделителиСлов — Строка — строка, содержащая символы-разделители.
//
//  Возвращаемое значение:
//      массив значений, элементы которого — отдельные слова.
//
// Пример:
//  РазложитьСтрокуВМассивСлов(«один-@#два2_!три») возвратит массив значений: «один», «два2_», «три»;
//  РазложитьСтрокуВМассивСлов(«один-@#два2_!три», «#@!_») возвратит массив значений: «один-«, «два2», «три».
//
Функция РазложитьСтрокуВМассивСлов(Знач Строка, РазделителиСлов = Неопределено) Экспорт

Слова = Новый Массив;

РазмерТекста = СтрДлина(Строка);
НачалоСлова = 1;
Для 
Позиция = 1 По РазмерТекста Цикл
КодСимвола = КодСимвола(Строка, Позиция);
Если 
ЭтоРазделительСлов(КодСимвола, РазделителиСлов) Тогда
Если 
Позиция <> НачалоСлова Тогда
Слова.Добавить(Сред(Строка, НачалоСлова, Позиция — НачалоСлова));
КонецЕсли;
НачалоСлова = Позиция + 1;
КонецЕсли;
КонецЦикла;

Если Позиция <> НачалоСлова Тогда
Слова.Добавить(Сред(Строка, НачалоСлова, Позиция — НачалоСлова));
КонецЕсли;

Возврат Слова;

КонецФункции

&НаСервере
///  Объединяет строки из массива в строку с разделителями.
//
// Параметры:
//  Массив      — Массив — массив строк которые необходимо объединить в одну строку;
//  Разделитель — Строка — любой набор символов, который будет использован в качестве разделителя.
//
// Возвращаемое значение:
//  Строка — строка с разделителями.
//
Функция СтрокаИзМассиваПодстрок(Массив, Разделитель = «,», СокращатьНепечатаемыеСимволы = Ложь) Экспорт

Результат = «»;

Для Индекс = 0 По Массив.ВГраница() Цикл

Подстрока = Массив[Индекс];

Если СокращатьНепечатаемыеСимволы Тогда
Подстрока = СокрЛП(Подстрока);
КонецЕсли;

Если ТипЗнч(Подстрока) <> Тип(«Строка») Тогда
Подстрока = Строка(Подстрока);
КонецЕсли;

Если Индекс > 0 Тогда
Результат = Результат + Разделитель;
КонецЕсли;

Результат = Результат + Подстрока;
КонецЦикла;

Возврат Результат;

КонецФункции

&НаСервере
// Разделяет текст на слова по указанным разделителям. По умолчанию разделители — пробельные символы.
//
// Параметры:
//     Текст       — Строка — Разделяемая строка.
//     Разделители — Строка — Необязательная строка символов-разделителей.
//
// Возвращаемое значение:
//     Массив — строки, слова
//
Функция СловаТекста(Знач Текст, Знач Разделители = Неопределено) Экспорт

НачалоСлова = 0;
Состояние   = 0;
Результат   = Новый Массив;

Для Позиция = 1 По СтрДлина(Текст) Цикл

ТекущийСимвол = Сред(Текст, Позиция, 1);
ЭтоРазделитель = ?(Разделители = Неопределено, ПустаяСтрока(ТекущийСимвол), Найти(Разделители, ТекущийСимвол) > 0);

Если Состояние = 0 И (Не ЭтоРазделитель) Тогда
НачалоСлова = Позиция;
Состояние   = 1;
ИначеЕсли 
Состояние = 1 И ЭтоРазделитель Тогда
Результат.Добавить(Сред(Текст, НачалоСлова, Позиция—НачалоСлова));
Состояние = 0;
КонецЕсли;
КонецЦикла;

Если Состояние = 1 Тогда
Результат.Добавить(Сред(Текст, НачалоСлова, Позиция—НачалоСлова));
КонецЕсли;

Возврат Результат;

КонецФункции

&НаСервере
Функция СократитьНеЦифры(Текст, ДопустимоКромеЦифр = «», Направление = Истина)

Длина = СтрДлина(Текст);
Если 
Направление Тогда
// Сокращение слева
Индекс = 1;
Конец  = 1 + Длина;
Шаг    = 1;
Иначе
// Сокращение справа
Индекс = Длина;
Конец  = 0;
Шаг    = —1;
КонецЕсли;

Пока Индекс <> Конец Цикл
Символ = Сред(Текст, Индекс, 1);
ЭтоЦифра = (Символ >= «0» И Символ <= «9») Или Найти(ДопустимоКромеЦифр, Символ) = 0;
Если 
ЭтоЦифра Тогда
Прервать;
КонецЕсли;
Индекс = Индекс + Шаг;
КонецЦикла;

Если Направление Тогда
// Сокращение слева
Возврат Прав(Текст, Длина — Индекс + 1);
КонецЕсли;

// Сокращение справа
Возврат Лев(Текст, Индекс);

КонецФункции