Имя: Пароль:
1C
1С v8
разделение строки
0 r2d24
 
19.11.13
14:53
Написал код. Есть переменная т="Молоко /Молочные изделия /2";
В этой переменной есть два "/". Эти слеши, должны разделить переменную на 3 части, т.е. должно получится "Молоко", "Молочные изделия", "2".
Я написал код, который это делает, но работает не так как я хочу.

т="Молоко /Молочные изделия /2";
Слеш=0;
Пока Найти(т,"/") > 0 Цикл
Позиция=Найти(т,"/");    
Слеш=Слеш+1;
    Если Слеш = 1 Тогда        
        т1=Лев(т,Позиция-1);
        т=Прав(т,СтрДлина(т)-Позиция);
        Сообщить(т1);
    ИначеЕсли Слеш = 2 Тогда
        т2=Лев(т, Позиция-1);
        т3=Сред(т,Позиция+1);
        Сообщить(т2);
        Сообщить(т3);
        Прервать;
    КонецЕсли;
КонецЦикла;

Код работает, но с помощью оператора "Прервать;". Без него все виснет.
Для чего я это спрашиваю? Для того, например, если мне нужно будет разделить переменную на большее количество, а значит то все нужно будет делать по другому
1 GROOVY
 
19.11.13
15:00
Вопрос то в чем?
2 vhl
 
19.11.13
15:01
т = СтрЗаменить(т, "/", Символы.ПС);
    ЧислоСтрок = СтрЧислоСтрок(т + " ");
    Для Счетчик = 1 По ЧислоСтрок Цикл
        Сообщить(СтрПолучитьСтроку(т, Счетчик));
    КонецЦикла;
3 hhhh
 
19.11.13
15:01
(0) ну логически объясните, почему   Если Слеш = 2, вы переменную "т" не меняете? Ведь зациклится, мама не горюй.
4 Euguln
 
19.11.13
15:02
(0) В типовых есть функция РазложитьСтрокуВМассивПодстрок
зачем изобретать велосипед?
5 r2d24
 
19.11.13
15:04
(4) я с пр нее ничего не знаю, вот и придумываю велосипед. Даже полезно иногда, я так думаю
6 Рэйв
 
19.11.13
15:06
Функция ИзСтрокиСРазделителями(Значение,Разделитель = ",") Экспорт
    
    Если ТипЗнч(Значение)<>Тип("Строка") Тогда    
        Сообщить("Функция ИзСтрокиСРазделителями.Некорректный вызов.Переданное значение должно быть строкой.");
        Возврат Неопределено;
    КонецЕсли;    
    спЗначения=Новый СписокЗначений;
    Если Найти(Значение,Разделитель)=0 Тогда
        //Сообщить("Функция ИзСтрокиСРазделителями.В переданном значении("""+Значение+""") нет ни одного указанного разделителя("""+Разделитель+""").");
        спЗначения.Добавить(Значение);
        Возврат спЗначения;
    КонецЕсли;    
    
    ЗначениеРазбитое=СтрЗаменить(Значение,Разделитель,Символы.ПС);
    Для н=1 По СтрЧислоСтрок(ЗначениеРазбитое) Цикл
        спЗначения.Добавить(СтрПолучитьСтроку(ЗначениеРазбитое,н));
    КонецЦикла;    
    Возврат спЗначения;
    
КонецФункции//ИзСтрокиСРазделителями
7 r2d24
 
19.11.13
15:15
Кое что добавил, изменил и теперь все как надо

т="Молоко /Молочные изделия /2 /Товар";
Слеш=0;
Пока Найти(т,"/") > 0 Цикл
Позиция=Найти(т,"/");    
Слеш=Слеш+1;
    Если Слеш = 1 Тогда        
        т1=Лев(т,Позиция-1);
        т=Прав(т,СтрДлина(т)-Позиция);
        Сообщить(т1);
    ИначеЕсли Слеш = 2 Тогда
        т2=Лев(т, Позиция-1);                  
        т=Прав(т,СтрДлина(т)-Позиция);
        Сообщить(т2);          
    ИначеЕсли Слеш = 3 Тогда
        т3=Лев(т,Позиция-1);
        т=Прав(т,СтрДлина(т)-Позиция);
        т4=т;          
        Сообщить(т3);
        Сообщить(т4);          
    КонецЕсли;
КонецЦикла;

Код полностью работает
Спасибо за помощь!
8 1dvd
 
19.11.13
15:17
(7) вот нахрена тему создавал спрашивается...
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.