1.
antonrost
656
20.07.06 12:58
Сейчас в теме
Если не у всех есть глРазложить:
//******************************************************************************
// глРазложить(Стр,Разделитель)
//
// Параметры:
// Стр - строка, которую необходимо разложить на подстроки.
// Параметр передается по значению.
// Разделитель - строка-разделитель, по умолчанию - запятая.
//
//
// Возвращаемое значение:
// список значений, элементы которого - подстроки
//
// Описание:
// Функция "расщепляет" строку на подстроки, используя заданный
// разделитель. Разделитель может иметь любую длину.
// Если в качестве разделителя задан пробел, рядом стоящие пробелы
// считаются одним разделителем, а ведущие и хвостовые пробелы параметра Стр
// игнорируются.
// Например,
// глРазложить(",ку,,,му", ",") возвратит список значений из пяти элементов,
// три из которых - пустые строки, а
// глРазложить(" ку му", " ") возвратит список значений из двух элементов
//
Функция глРазложить(Знач Стр, Разделитель = ",", нижрег = 0) Экспорт
СЗ = СоздатьОбъект("СписокЗначений");
Если ПустоеЗначение(Стр) = 1 Тогда
Возврат СЗ;
КонецЕсли;
Если Разделитель = " " Тогда
Стр = СокрЛП(Стр);
Пока 1=1 Цикл
Поз = Найти(Стр,Разделитель);
Если Поз=0 Тогда
Если НижРег = 1 Тогда
СЗ.ДобавитьЗначение(Нрег(Стр));
Иначе
СЗ.ДобавитьЗначение(Стр);
КонецЕсли;
Возврат СЗ;
КонецЕсли;
Если НижРег = 1 Тогда
СЗ.ДобавитьЗначение(Нрег(Лев(Стр,Поз-1)));
Иначе
СЗ.ДобавитьЗначение(Лев(Стр,Поз-1));
КонецЕсли;
Стр = СокрЛ(Сред(Стр,Поз));
КонецЦикла;
Иначе
ДлинаРазделителя = СтрДлина(Разделитель);
Пока 1=1 Цикл
Поз = Найти(Стр,Разделитель);
Если Поз=0 Тогда
Если НижРег = 1 Тогда
СЗ.ДобавитьЗначение(Нрег(Стр));
Иначе
СЗ.ДобавитьЗначение(Стр);
КонецЕсли;
Возврат СЗ;
КонецЕсли;
Если НижРег = 1 Тогда
СЗ.ДобавитьЗначение(Нрег(Лев(Стр,Поз-1)));
Иначе
СЗ.ДобавитьЗначение(Лев(Стр,Поз-1));
КонецЕсли;
Стр = Сред(Стр,Поз+ДлинаРазделителя);
КонецЦикла;
КонецЕсли;
КонецФункции // глРазложить