Разложить строку в массив. Но есть одно НО.. #773831


#0 by oslokot
Есть csv файл, задача тривиальна: прочитать и разложить строки в массив. Файл с разделителями вида: Пользуюсь типовой функцией РазложитьСтрокуВМассивПодстрок(Стр, ";") Но блин, есть строки со значениями содержащие разделитель ";" например: "Значение1";"Значение2;";"Значение3";"Значение4" и т.д. Соответственно все сбивается. Как красиво выкрутиться? п.с. Экселька-то нормально открывает этот файл, все значения разделяет правильно.. как ей это удается - хз)
#1 by Lama12
Сделай вначале замену ;" на " во всем файле.
#2 by Tarzan_Pasha
экранировать надо как то символы.
#3 by oslokot
не исключено, что попадется вариант типа: "Значение1";"Знач;ение2";"Значение3";"Значение4"
#4 by Garykom
Экселька правильно парсит в отличие от СтрЗаменить(,";",) Сделай посимвольный парсер в виде КА с состояниями, чтобы разделять числовые (без "") и строковые значения (внутри "") между разделителями. И еще уточни есть ли экранирование кавычек внутри строковых и есть ли там вообще кавычки. От этого сложность парсера будет зависеть. Если значений не обрамленных в кавычки нету и нет внутри сочетаний ";" кроме как разделители то дели по ним и все.
#5 by Garykom
+ СтрЗаменить(ИсходнаяСтрока, """;""", ..)
#6 by oslokot
Что характерно, все значения находятся между ковычками А вот встречаются ли ковычки среди ковычек.. хз.. надо понаблюдать
#7 by Serginio1
#8 by Матиус III
Ваши предки в вашем возрасте уже ракеты создали и человека в космос отправили, а в с такой ерундой справиться не можете...
#9 by Serginio1
Там не совсем ерунда, но обыкновенный ДКА
#10 by oslokot
спасибо, интересно. сейчас попробую
#11 by Матиус III
Все равно, подобная задача должна решаться автоматически, не вызывая замедления в решении основной задачи.
#12 by oslokot
да, хороший вариант
#13 by Матиус III
Плохой вариант. Споткнется на одном из этого: Пробелов гарантированно не будет?
#14 by Serginio1
7+ строка для разбора То есть Например такая строка 435,"7689900--"",,,369" где Delimiter="," и QuoteChar="""" Содержит значения 435 7689900--",,,369
#15 by oslokot
Спасибо! Вот так работает:
#16 by oslokot
Но если попадется ковычка среди ковычек то всё. Правда, пока таких случаев не наблюдал
#17 by Serginio1
Смотри 14 там есть все варианты. Разбирает всё согласно правилам.
#18 by oslokot
Хотя можно пока и так оставить: спасибо буду экспериментировать..
#19 by breezee
Самый простой способ - писать строку, используя за место разделителя ";" Какой-нибудь символ из юникода. На пример треугольник.
#20 by shulerr
СтрЗаменить(стр, """;", Символы.ПС);
#21 by Serginio1
смотри 14
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С