|
Работа со строками | ☑ | ||
---|---|---|---|---|
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);
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |