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

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

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

Диапазоны = Новый Массив;
Диапазоны.Добавить(Новый Структура(“Мин,Макс”4857)); // цифры
Диапазоны.Добавить(Новый Структура(“Мин,Макс”6590)); // латиница большие
Диапазоны.Добавить(Новый Структура(“Мин,Макс”97122)); // латиница маленькие
Диапазоны.Добавить(Новый Структура(“Мин,Макс”10401103)); // кириллица
Диапазоны.Добавить(Новый Структура(“Мин,Макс”10251025)); // символ “Ё”
Диапазоны.Добавить(Новый Структура(“Мин,Макс”11051105)); // символ “ё”
Диапазоны.Добавить(Новый Структура(“Мин,Макс”9595)); // символ “_”
Для Каждого Диапазон Из Диапазоны Цикл
Если 
КодСимвола >= Диапазон.Мин И КодСимвола <Диапазон.Макс Тогда
Возврат Ложь;
КонецЕсли;
КонецЦикла;

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

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

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

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

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

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

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

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

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

Результат “”;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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