Имя: Пароль:
1C
 
Разложение строки
0 quazare
 
28.07.09
07:23
Народ, есть ли простой способ разложить строку на 2 подстроки, имея разделителем такую конструкцию из 3-х символов " ) " - 2 пробела и скобка?
1 ТелепатБот
 
гуру
28.07.09
07:23
2 Pashkaa
 
28.07.09
07:30
В типовых есть Функция СтрокуВМассив, где можно задать твою строку и разделитель, на выходе получишь Массив строк
3 Нуф-Нуф
 
28.07.09
07:34
находишь позицию вхождения Найти(ТвояСтрока," ) ") и уже от полученной цифры скачешь Лев,Прав,сред
4 AlStorm
 
28.07.09
07:34
Да блин, это ж вообще элементарно. Ищешь в строке " ( ". Зпоминаешь позицию. Все, что до - первая подстрока, после- вторая.
Как говорил Герберт Шилдт, ничто так не учит программированию, как задачи со строками.
5 ИначеЕсли
 
28.07.09
10:09
Разбор строки
ТелепатБот, ответь
6 Rebelx
 
28.07.09
10:15
// Пробразует переданную строку с разделителями в массив значений
// Корректно обрабатывает вложенные строки
//
// Параметры:
//    Значение - строка с разделителями, значения из которой необходимо преобразовать в массив
//    Разделитель - определяет разделитель значений
//
// Возвращаемое значение:
//    Массив значений, выделенных из строки
//
Функция ИзСтрокиСРазделителями(Знач Значение, Знач Разделитель = ",") Экспорт
   
   Если СтрДлина(Разделитель) = 0 тогда
       ВызватьИсключение("Ошибка при вызове функции (ИзСтрокиСРазделителями): Несоответствие типов (параметр номер '2')");
   КонецЕсли;
   
   ДлинаРазделителя = СтрДлина(Разделитель);
   Результат = Новый Массив();
   
   
   Пока СтрДлина(Значение) > 0 Цикл
       ПозицияРазделителя = Найти(Значение, Разделитель);
       Если ПозицияРазделителя = 0 тогда
           Результат.Добавить(СокрЛП(Значение));
           Прервать;
       Иначе
           КоличествоКавычек = СтрЧислоВхождений(Лев(Значение, ПозицияРазделителя - 1), """");
           Пока (Цел(КоличествоКавычек / 2) * 2) <> КоличествоКавычек Цикл
               НоваяПозицияРазделителя = Найти(Сред(Значение, ПозицияРазделителя + ДлинаРазделителя), Разделитель);
               Если НоваяПозицияРазделителя > 0 тогда
                   ПозицияРазделителя = ПозицияРазделителя + НоваяПозицияРазделителя - 1 + ДлинаРазделителя;
               Иначе
                   Результат.Добавить(СокрЛП(Значение));
                   Перейти ~ВыходИзПроцедуры;
               КонецЕсли;
               КоличествоКавычек = СтрЧислоВхождений(Лев(Значение, ПозицияРазделителя - 1), """");
           КонецЦикла;
           Результат.Добавить(СокрЛП(Лев(Значение, ПозицияРазделителя - 1)));
           Значение = Сред(Значение, ПозицияРазделителя + ДлинаРазделителя);
           
       КонецЕсли;
       
   КонецЦикла;
~ВыходИзПроцедуры:
   
   Возврат Результат;
КонецФункции
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший