Имя: Пароль:
1C
1С v8
Работа со строками
,
0 sweeex
 
11.08.15
19:33
Добрый вечер. Подскажите как мне разложить строку. Строка: "585, 19,5 см, , 15,34, Без вставки" а мне нужно: А= 585; Б= 19,5 см,С = ; Д = 15,34; Е = Без вставки;
1 runoff_runoff
 
11.08.15
19:36
запятые одновременно в качестве разных разделителей всё убивают..
2 sweeex
 
11.08.15
19:39
(1) Да, тут нужно разбирать строку как то...пока что норм не получается. Могу получить только значение до первого знака ","
3 runoff_runoff
 
11.08.15
19:39
19,5 не получается..
получается 19 и 5
4 Мимохожий Однако
 
11.08.15
19:42
Сделай несколько разных примеров. Может быть, и нащупаешь алгорит. Единственный разделитель, который можно не оспаривать это "см,"
5 sweeex
 
11.08.15
19:54
Фигня получается...

КоличествоСимволовВстроке = СтрДлина(Характеристика);    
поискЗолото = Найти(Характеристика,",");
стрЗолото = Лев(Характеристика,поискЗолото-1);
Результат = стрЗолото;
СтрокаБезЗолота =СокрЛП(Прав(Характеристика,КоличествоСимволовВстроке-поискЗолото));

стрРазмер = Лев(СтрокаБезЗолота,Найти(СтрокаБезЗолота,"м,"));
СтрокаБезЗолРазм = СокрЛП(Прав(СтрокаБезЗолота,СтрДлина(СтрокаБезЗолота)-СтрДлина(стрРазмер+1)));

Итого получил А и Б теперь осталось ", , 15,34, Без вставки"
6 PuhUfa
 
11.08.15
20:02
", " - в качестве разделителя, не?
7 sweeex
 
11.08.15
20:04
(6) у меня это разделитель "," между характеристиками и в то же время знак "," участвует как разделитель в числе (15,34)
8 PuhUfa
 
11.08.15
20:07
", c пробелом после него" - в качестве разделителя
9 sweeex
 
11.08.15
20:07
может есть другой метод задача Мне нужно характеристику разложить на строки.
10 Мимохожий Однако
 
11.08.15
20:08
Читай посимвольно и отделяй по первой, третьей и т.п. запятой
11 zak555
 
11.08.15
21:07
Откуда строку получаешь ?
12 Провинциальный 1сник
 
11.08.15
21:14
Парсить посимвольно, очевидно. Набирать символы в буфер текущего значения, пока не будет достигнут критерий "значение кончилось", далее перебор символов разделителя, пока не появится первый символ, который идентифицирует начало значения. И так далее.
13 fisher
 
11.08.15
21:25
(6) +1
14 fisher
 
11.08.15
21:28
Посимвольный парсинг не требуется.
15 Strogg
 
11.08.15
21:34
Если слева и справа от запятой нет запятой, или пробела - то такая запятая считается разделителем разрядов. Иначе - разделителем полей.
16 fisher
 
11.08.15
21:41
Для тех кто до сих пор в танке - ДВА символа в качестве разделителя - запятая с пробелом после нее.
17 Strogg
 
11.08.15
21:46
(16) ы, тока заметил с телефона, что там в кавычках в (6) есть пробел. Все верно.
18 badboychik
 
11.08.15
21:46
ТоЧтоНадо = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(Строка,", ")
19 Kvant1C
 
11.08.15
21:46
(0) Замени запятую внутри числа на точку и далее используй запятую как разделитель.
20 Провинциальный 1сник
 
12.08.15
07:26
(19) И как это сделать без посимвольного парсинга?)
21 beaver1971
 
12.08.15
07:49
СтрокаДляРазбора = "585, 19,5 см, , 15,34, Без вставки";
    Сообщить(СтрокаДляРазбора);
    Reg = Новый COMОбъект("VBScript.RegExp");
    Reg.Pattern = "(.+), (.+),(.+), (.+), (.+)";
    ИтоговаяСтрока = Reg.Replace(СтрокаДляРазбора, "А=$1; Б=$2; С=$3; Д=$4; Е=$5");
    Сообщить(ИтоговаяСтрока);

Криво, но работает...
585, 19,5 см, , 15,34, Без вставки
А=585; Б=19,5 см; С= ; Д=15,34; Е=Без вставки
22 Альбатрос
 
12.08.15
07:54
(21) Круто. А если формат сменится?
23 Лодырь
 
12.08.15
07:55
(22) Надеяться, что при смене разделитель изменится.
24 asady
 
12.08.15
08:19
(0) самое простое в твоей ситуации - найти того програ который формирует строку - которую ты будешь парсить и договориться с ним о нормальных разделителях.
25 trooba
 
12.08.15
08:23
(20) Можно использовать функцию стандартных кофигураций РазобратьСтрокуВМассивПодстрок(), а затем конкатенация 1 и 2 элемента массива
26 beaver1971
 
12.08.15
08:30
Извращение :)
    ПС = Символы.ПС;
    СтрокаДляРазбора = "585НовыйРазделитель19,5 смНовыйРазделительНовыйРазделитель15,34НовыйРазделительБез вставки";
    СтрокаДляРазбора = СтрЗаменить(СтрокаДляРазбора, "НовыйРазделитель", ПС);
    ИтоговаяСтрока = "";
    СтрокаБуковок = "А" + ПС + "Б" + ПС + "С" + ПС + " Д" + ПС + "Е";
    Для х = 1 По СтрЧислоСтрок(СтрокаДляРазбора) Цикл
        ИтоговаяСтрока = ИтоговаяСтрока + СтрПолучитьСтроку(СтрокаБуковок, х) + "=" + СтрПолучитьСтроку(СтрокаДляРазбора, х) + "; ";
    КонецЦикла;
    Сообщить(ИтоговаяСтрока);
27 trooba
 
12.08.15
08:41
+(25) ТвойМассив=РазложитьСтрокуВМассивПодстрок("585, 19,5 см, , 15,34, Без вставки" ,  ",");

НовоеЗначение=ТвойМассив.Индекс(1)+","+ТвойМассив.Индекс(12);

ТвойМассив.Вставить(1,НовоеЗначение);
ТвойМассив.Удалить(2);
28 trooba
 
12.08.15
08:41
НовоеЗначение=ТвойМассив.Индекс(1)+","+ТвойМассив.Индекс(2);
Ошибка? Это не ошибка, это системная функция.