Имя: Пароль:
1C
 
7.7 Подскажите как разобрать строку на выражения ?
, ,
0 raykom
 
22.07.05
14:37
Есть строка, например, "Тип,Корреспондент,Пауза", как разобрать ее на отдельные выражения без кавычек и запятых Тип Корреспондент и Пауза. Количество выражений не ограничено. Пройти поставить кавычки перед и после запятой, а потом ИзСтрокиСРазделителями(), громоздко. На более легкую конструкцию не хватает соображалки. :). Кому нетрудно, помогите.
1 Ветеран
 
22.07.05
14:40
Комм=СтрЗаменить(Стр,",",РазделительСтрок);  
Для Х=1 По СтрКоличествоСтрок(Стр) Цикл
Сообщить(СтрПолучитьСтроку(Стр,Х));
...
2 Guk
 
22.07.05
14:40
Стр=СтрЗаменить(Стр,",",РазделительСтрок);
Тип=СтрПолучитьСтроку(Стр,1);
Корреспондент =СтрПолучитьСтроку(Стр,2);
Пауза=СтрПолучитьСтроку(Стр,3);
3 goodfella
 
22.07.05
14:44
ИзСтрокиСРазделителями(<?>)
Синтаксис:
ИзСтрокиСРазделителями(<Строка>)
Назначение:
Заполняет СписокЗначений значениями из переданной в качестве параметра строки, содержащей разделенные запятыми значения: числа и строки в двойных кавычках.
Параметры:
<Строка> - символьная строка, в которой значения разделены запятыми. В качестве значений могут быть числа и строковые значения - они записываются в двойных кавычках.
4 goodfella
 
22.07.05
14:44
Отбой, не дочитал. :(
5 Zanuda
 
22.07.05
14:45
//-----------------------------------------------
Функция ОбработкаСтрокиЭлементов(Знач СтрЭлем,Разделитель) Экспорт
Список = СоздатьОбъект("СписокЗначений");
Пока СтрДлина(СокрЛП(СтрЭлем)) <> 0 Цикл
 Если Найти(СокрЛП(СтрЭлем),Разделитель) > 0 Тогда
  ПС = СокрЛП(Лев(СтрЭлем,Найти(СтрЭлем,Разделитель)-1));
  Если СокрЛП(ПС) <> "" Тогда
   Список.ДобавитьЗначение(ПС,ПС);
   СтрЭлем = СокрЛП(Прав(СтрЭлем,СтрДлина(СтрЭлем)-Найти(СтрЭлем,ПС)-СтрДлина(ПС)));
  Иначе
               СтрЭлем = Прав(СтрЭлем,СтрДлина(СтрЭлем)-1);
  КонецЕсли;
 Иначе    
  Список.ДобавитьЗначение(СокрЛП(СтрЭлем),СокрЛП(СтрЭлем));
  СтрЭлем = "";
 КонецЕсли;
КонецЦикла;
Возврат Список;
КонецФункции

Процедура...
СтрокаВыражений = "Тип,Корреспондент,Пауза";
Список_ = ОбработкаСтрокиЭлементов(СтрокаВыражений,",");

КонецПроцедуры

И теперь в списке у тебя отдельные выражения.
6 raykom
 
22.07.05
14:56
Оч рад, что отозвались:).
По порядку.
(1)Почти, как я пробовал. Только здесь изячней меняются запятые на ",". Только потом Надо в Список из СтрокиСРазделителями().
(2)Количество выражений в строке НЕОГРАНИЧЕНО. Тут так не пойдет.
(3)Все ясно из Всего вышесказанного.
Ступил я чего то. Как в (1) наверное проще всего и в список. Счас накодю. :)
Guk, с приездом. Или я опят чего то пропустил ?:))
Спаибо.
7 Guk
 
22.07.05
14:58
(6) И тебя также. Я как пример показал. Можешь цикл запустить. (1) не видел. Медленный инет...
8 raykom
 
22.07.05
14:58
(5)Это хорошо до первой запятой, а потом код вернет все слева до второй запятой и т.д. Или ошибаюсь ?
9 Zanuda
 
22.07.05
15:00
Пользуюсь уже года 2. Сделано было потому, что не только запятые в качестве разделителя, бывают и другие символы
10 Zanuda
 
22.07.05
15:01
(8) Функция вернет список, в котором будут
Значение 1 Тип
Значение 2 Корреспонденция
Значение 3 Пауза
11 raykom
 
22.07.05
15:01
(9) Счас спробую.
12 Ветеран
 
22.07.05
15:02
(9) Прикольно тупишь ...
13 raykom
 
22.07.05
15:09
Всем спасибо, сделал замену символов как в один, далеее пособсному тексту. С такой оперативной компанией и выпить не грех;)).
14 raykom
 
22.07.05
16:37
(0) Во. Работает.:)))
   СписокКолонок=СоздатьОбъект("СписокЗначений");
   СписокКолонок.УдалитьВсе();
   СтрокаКолонок=СтрЗаменить(стрВыводимыеРеквизиты,",",РазделительСтрок);
   Для СчКол=1 по  СтрКоличествоСтрок(СтрокаКолонок) Цикл
       ИдКол=СтрПолучитьСтроку(СтрокаКолонок,СчКол);
       тзСсылка.НоваяКолонка(ИдКол,,,,,,,);
   КонецЦикла;