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

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

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

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

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

в Четверг сентября 17 от Администратор
Было ли это полезно?