Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save evgenylavelin-xx/6eae838144501242dbcc to your computer and use it in GitHub Desktop.
Save evgenylavelin-xx/6eae838144501242dbcc to your computer and use it in GitHub Desktop.
&НаСервере
// Определяет, является ли символ разделителем.
//
// Параметры:
// КодСимвола - Число - код проверяемого символа;
// РазделителиСлов - Строка - символы разделителей.
//
// Возвращаемое значение:
// Булево - истина, если символ является разделителем.
//
Функция ЭтоРазделительСлов(КодСимвола, РазделителиСлов = Неопределено) Экспорт
Если РазделителиСлов <> Неопределено Тогда
Возврат Найти(РазделителиСлов, Символ(КодСимвола)) > 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);
КонецЕсли;
// Сокращение справа
Возврат Лев(Текст, Индекс);
КонецФункции
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment