глРазложить(Стр,Разделитель)
Параметры:
Стр - строка, которую необходимо разложить на подстроки.
Параметр передается по значению.
Разделитель - строка-разделитель, по умолчанию - запятая.
Возвращаемое значение:
список значений, элементы которого - подстроки
Описание:
Функция "расщепляет" строку на подстроки, используя заданный разделитель.
Разделитель может иметь любую длину.
Если в качестве разделителя задан пробел, рядом стоящие пробелы
считаются одним разделителем, а ведущие и хвостовые пробелы параметра Стр
игнорируются.
Пример:
глРазложить(",ку,,,му", ",") возвратит список значений из пяти элементов,
три из которых - пустые строки, а
глРазложить(" ку му", " ") возвратит список значений из двух элементов
Код 1C v 7.x
Функция глРазложить(Знач Стр, Разделитель = "," ) Экспорт
СЗ = СоздатьОбъект( "СписокЗначений" ) ;
Если Разделитель = " " Тогда
Стр = СокрЛП( Стр) ;
Пока 1 = 1 Цикл
Поз = Найти( Стр, Разделитель) ;
Если Поз= 0 Тогда
СЗ. ДобавитьЗначение( Стр) ;
Возврат СЗ;
КонецЕсли ;
СЗ. ДобавитьЗначение( Лев( Стр, Поз- 1 ) ) ;
Стр = СокрЛ( Сред( Стр, Поз) ) ;
КонецЦикла ;
Иначе
ДлинаРазделителя = СтрДлина( Разделитель) ;
Пока 1 = 1 Цикл
Поз = Найти( Стр, Разделитель) ;
Если Поз= 0 Тогда
СЗ. ДобавитьЗначение( Стр) ;
Возврат СЗ;
КонецЕсли ;
СЗ. ДобавитьЗначение( Лев( Стр, Поз- 1 ) ) ;
Стр = Сред( Стр, Поз+ ДлинаРазделителя) ;
КонецЦикла ;
КонецЕсли ;
КонецФункции
Код 1C v 8.х
Функция глРазложить(Знач Стр, Разделитель = "," ) Экспорт
СЗ = Новый СписокЗначений;
Если Разделитель = " " Тогда
Стр = СокрЛП( Стр) ;
Пока 1 = 1 Цикл
Поз = Найти( Стр, Разделитель) ;
Если Поз= 0 Тогда
СЗ. Добавить( Стр) ;
Возврат СЗ;
КонецЕсли ;
СЗ. Добавить( Лев( Стр, Поз- 1 ) ) ;
Стр = СокрЛ( Сред( Стр, Поз) ) ;
КонецЦикла ;
Иначе
ДлинаРазделителя = СтрДлина( Разделитель) ;
Пока 1 = 1 Цикл
Поз = Найти( Стр, Разделитель) ;
Если Поз= 0 Тогда
СЗ. Добавить( Стр) ;
Возврат СЗ;
КонецЕсли ;
СЗ. Добавить( Лев( Стр, Поз- 1 ) ) ;
Стр = Сред( Стр, Поз+ ДлинаРазделителя) ;
КонецЦикла ;
КонецЕсли ;
КонецФункции
Пример использования функции глРазложить Код 1C v 7.x
Функция глРазложить(Знач Стр, Разделитель = "," ) Экспорт
СЗ = СоздатьОбъект( "СписокЗначений" ) ;
Если Разделитель = " " Тогда
Стр = СокрЛП( Стр) ;
Пока 1 = 1 Цикл
Поз = Найти( Стр, Разделитель) ;
Если Поз= 0 Тогда
СЗ. ДобавитьЗначение( Стр) ;
Возврат СЗ;
КонецЕсли ;
СЗ. ДобавитьЗначение( Лев( Стр, Поз- 1 ) ) ;
Стр = СокрЛ( Сред( Стр, Поз) ) ;
КонецЦикла ;
Иначе
ДлинаРазделителя = СтрДлина( Разделитель) ;
Пока 1 = 1 Цикл
Поз = Найти( Стр, Разделитель) ;
Если Поз= 0 Тогда
СЗ. ДобавитьЗначение( Стр) ;
Возврат СЗ;
КонецЕсли ;
СЗ. ДобавитьЗначение( Лев( Стр, Поз- 1 ) ) ;
Стр = Сред( Стр, Поз+ ДлинаРазделителя) ;
КонецЦикла ;
КонецЕсли ;
КонецФункции
Функция ФамилияИмяОтчество(Объект,Фамилия="" ,Имя="" ,Отчество="" ) Экспорт
Если ТипЗначения( Объект) = 2 Тогда
ФИО = глРазделить( СокрЛП( Объект) , "," ) ;
Иначе
ФИО = глРазделить( СокрЛП( Объект. Наименование) , "," ) ;
КонецЕсли ;
ФИО = глРазложить( ФИО, " " ) ;
Фамилия = "" ; Имя = "" ; Отчество = "" ;
Если ФИО. РазмерСписка( ) > 0 Тогда
Фамилия = ФИО. ПолучитьЗначение( 1 ) ;
Если ФИО. РазмерСписка( ) > 1 Тогда
Имя = ФИО. ПолучитьЗначение( 2 ) ;
Если ФИО. РазмерСписка( ) > 2 Тогда
Для Сч = 3 По ФИО. РазмерСписка( ) Цикл
Отчество = Отчество + ФИО. ПолучитьЗначение( Сч) + " " ;
КонецЦикла ;
Если ПустоеЗНачение( Отчество) = 0 Тогда
Отчество = Лев( Отчество, СтрДлина( Отчество) - 1 ) ;
КонецЕсли ;
КонецЕсли ;
КонецЕсли ;
КонецЕсли ;
Возврат Фамилия+ ? ( ПустоеЗначение( Имя) = 0 , " " + Лев( Имя, 1 ) + "." + ? ( ПустоеЗначение( Отчество) = 0 , Лев( Отчество, 1 ) + "." , "" ) , "" )
КонецФункции
Код 1C v 8.х
Функция глРазложить(Знач Стр, Разделитель = "," ) Экспорт
СЗ = Новый СписокЗначений;
Если Разделитель = " " Тогда
Стр = СокрЛП( Стр) ;
Пока 1 = 1 Цикл
Поз = Найти( Стр, Разделитель) ;
Если Поз= 0 Тогда
СЗ. Добавить( Стр) ;
Возврат СЗ;
КонецЕсли ;
СЗ. Добавить( Лев( Стр, Поз- 1 ) ) ;
Стр = СокрЛ( Сред( Стр, Поз) ) ;
КонецЦикла ;
Иначе
ДлинаРазделителя = СтрДлина( Разделитель) ;
Пока 1 = 1 Цикл
Поз = Найти( Стр, Разделитель) ;
Если Поз= 0 Тогда
СЗ. Добавить( Стр) ;
Возврат СЗ;
КонецЕсли ;
СЗ. Добавить( Лев( Стр, Поз- 1 ) ) ;
Стр = Сред( Стр, Поз+ ДлинаРазделителя) ;
КонецЦикла ;
КонецЕсли ;
КонецФункции
Функция РазборФИО(Сотрудник)
ФИО = глРазложить( Сотрудник, " " ) ;
Фамилия = "" ; Имя = "" ; Отчество = "" ;
Если ФИО. Количество( ) > 0 Тогда
Фамилия = Строка( ФИО. Получить( 0 ) ) ;
Если ФИО. Количество( ) > 1 Тогда
Имя = Строка( ФИО. Получить( 1 ) ) ;
Если ФИО. Количество( ) > 2 Тогда
Для Сч = 2 По ФИО. Количество( ) - 1 Цикл
Отчество = Отчество + Строка( ФИО. Получить( Сч) ) + " " ;
КонецЦикла ;
Если ЗначениеЗаполнено( Отчество) Тогда
Отчество = Лев( Отчество, СтрДлина( Отчество) - 1 ) ;
КонецЕсли ;
КонецЕсли ;
КонецЕсли ;
КонецЕсли ;
Возврат Фамилия+ ? ( ЗначениеЗаполнено( Имя) , " " + Лев( Имя, 1 ) + "." + ? ( ЗначениеЗаполнено( Отчество) , Лев( Отчество, 1 ) + "." , "" ) , "" )
КонецФункции
Обязательно посмотрите более краткий вариант!