Функция получения части строки с разными разделителями по номеру   

Довольно часто в возникает задача работать со строками с произвольными разделителями. Например – получить по номеру какую-то часть строки с разделителями. Предлагаю универсальный механизм работы со строкой с разделителями. В приведенной функции можно использовать разные разделители.

Возможность работы с несколькими разделителями сделана для тех случаев, когда установленные правила расстановки разделителей могут не соблюдаться. Например, в определенную строчку пользователем вводятся значения с разделителем «/». Пользователи могут напутать и ввести и «» и «|». То есть – возможны варианты. В данной функции мы можем указать для поиска все возможные варианты разделителей, чтобы исключить ошибки пользователей.

В данной функции используется механизм использования «многострочных» строк, ранее описанный здесь.

Дополнительная возможность данной функции – вывести в случае неудачи сообщение об ошибке, которое передается на входе функции по желанию программиста. Если произошла ошибка и в функцию передан текст сообщения – он выводится в строку сообщений с использованием маркера (он тоже передается в функцию).

Вот эта функция (у меня она находится в глобальном модуле):

Функция глПолучитьЧасть(ПармТекст, ПармРазделители, ПармНомер, ПармПробелы=0, ПармСообщение="", ПармЗнак="") Экспорт
    //(c) www.perlscript.ru
    Перем ТекТекст, ТекРезультат;
    ТекТекст=ПармТекст;
    Для к=1 по СтрДлина(ПармРазделители) Цикл
        ТекТекст=СтрЗаменить(ТекТекст,Сред(ПармРазделители,к,1),РазделительСтрок);
    КонецЦикла;
    Если СтрКоличествоСтрок(ТекТекст)<ПармНомер Тогда
        //При необходимости выводим сообщение.
        Если СтрДлина(ПармСообщение)>0 Тогда
            Сообщить(ПармСообщение,ПармЗнак);
        КонецЕсли;
        ТекРезультат="";
    Иначе
        ТекРезультат=СтрПолучитьСтроку(ТекТекст,ПармНомер);
    КонецЕсли;
    //ПармПробелы - оставлять крайние пробелы или нет. (1 / 0)
    //По умолчанию пробелы удаляются
    Возврат ?(ПармПробелы=1,ТекРезультат,СокрЛП(ТекРезультат));
КонецФункции

 


 

Перепечатка, воспроизведение в любой форме, распространение, в том числе в переводе, любых материалов с сайта www.softpoint.ru возможны только с письменного разрешения компании "СофтПоинт". Это правило действует для всех без исключения случаев, кроме тех, когда в материале прямо указано разрешение на копирование (основание: Закон Российской Федерации "Об авторском праве и смежных правах").