Имя: Пароль:
1C
1С v8
Разложить строку
,
0 мистер игрек
 
07.09.11
09:46
Например есть строка - "Иванов;Петров;Сидоров"
Надо их конвертировать в список значений или массив типа:

Иванов
Петров
Сидоров

В семерке есть встроенная функция для разложения, а в восьмерке есть?
1 ZanderZ
 
07.09.11
09:47
напишешь будет
2 abitfrosty
 
07.09.11
09:48
Встроенной нет, типовая - есть.
3 andrewks
 
07.09.11
09:48
замени ; на Символы.ПС
4 Wobland
 
07.09.11
09:49
многострочную строку не предлагали ещё?
5 YurOK_51
 
07.09.11
09:49
// Функция "расщепляет" строку на подстроки, используя заданный
//        разделитель. Разделитель может иметь любую длину.
//        Если в качестве разделителя задан пробел, рядом стоящие пробелы
//        считаются одним разделителем, а ведущие и хвостовые пробелы параметра Стр
//        игнорируются.
//        Например,
//        РазложитьСтрокуВМассивПодстрок(",ку,,,му", ",") возвратит массив значений из пяти элементов,
//        три из которых - пустые строки, а
//        РазложитьСтрокуВМассивПодстрок(" ку   му", " ") возвратит массив значений из двух элементов
//
//    Параметры:
//        Стр -            строка, которую необходимо разложить на подстроки.
//                        Параметр передается по значению.
//        Разделитель -    строка-разделитель, по умолчанию - запятая.
//
//
//    Возвращаемое значение:
//        массив значений, элементы которого - подстроки
//
Функция РазложитьСтрокуВМассивПодстрок(Знач Стр, Разделитель = ",") Экспорт
   
   МассивСтрок = Новый Массив();
   Если Разделитель = " " Тогда
       Стр = СокрЛП(Стр);
       Пока 1=1 Цикл
           Поз = Найти(Стр,Разделитель);
           Если Поз=0 Тогда
               МассивСтрок.Добавить(Стр);
               Возврат МассивСтрок;
           КонецЕсли;
           МассивСтрок.Добавить(Лев(Стр,Поз-1));
           Стр = СокрЛ(Сред(Стр,Поз));
       КонецЦикла;
   Иначе
       ДлинаРазделителя = СтрДлина(Разделитель);
       Пока 1=1 Цикл
           Поз = Найти(Стр,Разделитель);
           Если Поз=0 Тогда
               МассивСтрок.Добавить(Стр);
               Возврат МассивСтрок;
           КонецЕсли;
           МассивСтрок.Добавить(Лев(Стр,Поз-1));
           Стр = Сред(Стр,Поз+ДлинаРазделителя);
       КонецЦикла;
   КонецЕсли;
   
КонецФункции // глРазложить
6 andrewks
 
07.09.11
09:50
(4) "многострочную строку"....
Epic-fail: autorecursion detected. Not enough memory.
7 andrewks
 
07.09.11
09:51
(5) разрабам за кол-во строк платят. вот и объяснение
8 Wobland
 
07.09.11
09:52
(6) <Номер строки> (обязательный)
Тип: Число. Номер получаемой строки. Нумерация строк в многострочной строке начинается с 1. © СП ;)
9 andrewks
 
07.09.11
09:54
(8) я и говорю: Epic-fail ;-)

по логике, это должен быть многострочный текст
10 Stepa86
 
07.09.11
09:57
Функция РазборСтроки(знач Стр, Разделитель = "," ) Экспорт
   
   #Если Не ( ТонкийКлиент ИЛИ ВебКлиент ) Тогда
       
       // РазбираемаяСтрока - строка исходного текста
       // Разделитель - разделитель элементов строки
       Возврат ЗначениеИзСтрокиВнутр("{""#"",51e7a0d2-530b-11d4-b98a-008048da3034,{0,{""S"",""" + СтрЗаменить(СтрЗаменить( Стр , """", """"""), Разделитель, """},{""S"",""") + """}}}");
       
       
   #Иначе
       
       МассивЗначений = Новый Массив;
       
       Символ = Найти(Стр, Разделитель);
       
       Пока Символ > 0 Цикл
           
           МассивЗначений.Добавить(Лев(Стр, Символ - 1));
           
           Стр = Прав(Стр, СтрДлина(Стр) - Символ);
           
           Символ = Найти(Стр, Разделитель);
           
       КонецЦикла;
       
       МассивЗначений.Добавить(Стр);
       
       Возврат МассивЗначений;
       
   #КонецЕсли
   
КонецФункции
11 мистер игрек
 
07.09.11
10:01
Всем спасибо, коллеги!
12 Kuzen
 
07.09.11
10:11
(0)
   стр = "Иванов;Петров;Сидоров";
   СтрЗаменить(стр,";",Символы.ПС);
   Для ч = 1 По СтрЧислоСтрок(стр) Цикл
       Ф = СтрПолучитьСтроку(стр,ч)    
   КонецЦикла;