![]() |
|
Разложить строку в массив. Но есть одно НО.. | ☑ | ||
---|---|---|---|---|
0
oslokot
04.06.16
✎
12:34
|
Есть csv файл, задача тривиальна: прочитать и разложить строки в массив.
Файл с разделителями вида: "Значение1";"Значение2";"Значение3";"Значение4" и т.д. Пользуюсь типовой функцией РазложитьСтрокуВМассивПодстрок(Стр, ";") Но блин, есть строки со значениями содержащие разделитель ";" например: "Значение1";"Значение2;";"Значение3";"Значение4" и т.д. Соответственно все сбивается. Как красиво выкрутиться? п.с. Экселька-то нормально открывает этот файл, все значения разделяет правильно.. как ей это удается - хз) |
|||
1
Lama12
04.06.16
✎
12:39
|
Сделай вначале замену ;" на " во всем файле.
|
|||
2
Tarzan_Pasha
04.06.16
✎
12:41
|
(0)экранировать надо как то символы.
|
|||
3
oslokot
04.06.16
✎
12:47
|
(1) не исключено, что попадется вариант типа:
"Значение1";"Знач;ение2";"Значение3";"Значение4" |
|||
4
Garykom
гуру
04.06.16
✎
12:47
|
(0) Экселька правильно парсит в отличие от СтрЗаменить(,";",)
Сделай посимвольный парсер в виде КА с состояниями, чтобы разделять числовые (без "") и строковые значения (внутри "") между разделителями. И еще уточни есть ли экранирование кавычек внутри строковых и есть ли там вообще кавычки. От этого сложность парсера будет зависеть. Если значений не обрамленных в кавычки нету и нет внутри сочетаний ";" кроме как разделители то дели по ним и все. |
|||
5
Garykom
гуру
04.06.16
✎
12:48
|
(4)+ СтрЗаменить(ИсходнаяСтрока, """;""", ..)
|
|||
6
oslokot
04.06.16
✎
12:50
|
Что характерно, все значения находятся между ковычками
А вот встречаются ли ковычки среди ковычек.. хз.. надо понаблюдать |
|||
7
Serginio1
04.06.16
✎
12:53
|
||||
8
Матиус III
04.06.16
✎
12:53
|
(0) Ваши предки в вашем возрасте уже ракеты создали и человека в космос отправили, а в с такой ерундой справиться не можете...
|
|||
9
Serginio1
04.06.16
✎
12:55
|
(8) Там не совсем ерунда, но обыкновенный ДКА
|
|||
10
oslokot
04.06.16
✎
12:59
|
(7) спасибо, интересно. сейчас попробую
|
|||
11
Матиус III
04.06.16
✎
13:00
|
(9) Все равно, подобная задача должна решаться автоматически, не вызывая замедления в решении основной задачи.
|
|||
12
oslokot
04.06.16
✎
13:00
|
(5) да, хороший вариант
|
|||
13
Матиус III
04.06.16
✎
13:03
|
(12) Плохой вариант. Споткнется на одном из этого:
"1" ;"2" "3"; "4" Пробелов гарантированно не будет? |
|||
14
Serginio1
04.06.16
✎
13:06
|
7+ строка для разбора
То есть Например такая строка 435,"7689900--"",,,369" где Delimiter="," и QuoteChar="""" Содержит значения 435 7689900--",,,369 |
|||
15
oslokot
04.06.16
✎
13:29
|
(14) Спасибо! Вот так работает:
ИзСтрокиСРазделителями(СтрокаДанных, ";", """") |
|||
16
oslokot
04.06.16
✎
13:31
|
Но если попадется ковычка среди ковычек то всё.
Правда, пока таких случаев не наблюдал |
|||
17
Serginio1
04.06.16
✎
13:34
|
(16) Смотри 14 там есть все варианты. Разбирает всё согласно правилам.
|
|||
18
oslokot
04.06.16
✎
13:36
|
Хотя можно пока и так оставить:
СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(СтрокаДанных, """;""") (17) спасибо буду экспериментировать.. |
|||
19
breezee
04.06.16
✎
18:49
|
Самый простой способ - писать строку, используя за место разделителя ";" Какой-нибудь символ из юникода. На пример треугольник.
|
|||
20
shulerr
04.06.16
✎
19:41
|
СтрЗаменить(стр, """;", Символы.ПС);
|
|||
21
Serginio1
04.06.16
✎
20:46
|
(20) смотри 14
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |