Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 11:02

Кавычки в строке при разборе csv файла

Автор ShadowXak, 06 дек 2019, 09:34

0 Пользователей и 1 гость просматривают эту тему.

ShadowXak

Доброго дня!

Столкнулся со следующей проблемой:

1с 8.3 делаю построчный разбор файла csv внешней обработкой
текст файла:

2157421QDO,XWeyroAff91803992pyyiPI1JQ/u42pFGRQd/mCZ1Th6J4GSLf01PWgx0Y2ZeesQPBtB1/aqjDQ==
2157421/ul0)N"SWGcWs918039926PeUH8YZ9l+1pAzCrtBloa3JGR/391QlOWjOBTrXKgy1czAOUj2locqXE0V01w==
2157421W5K34Taq8g(wq91803992l4qVKTQ/0p+hB9TYKC2tWh41F9uaPjq3qBRQQpO5GB9ruusRrm8Nmd4GaPbwCg==


1 колонка в итоге должна быть записана и как есть, но во второй строке по середине присутствует кавычка (") и 1с найдя ее начинает экранировать всю строку.

Что написать что бы 1с вставляла как есть в файле и не занималась самодеетельностью.

Функция РазложитьСтрокуВМассивПодстрок(Знач Стр, Разделитель = ",")

МассивСтрок = Новый Массив();
Если Разделитель = " " Тогда
Стр = СокрЛП(Стр);
Пока Истина Цикл
Поз = Найти(Стр,Разделитель);
Если Поз=0 Тогда
МассивСтрок.Добавить(Стр);
Возврат МассивСтрок;
КонецЕсли;
МассивСтрок.Добавить(Лев(Стр,Поз-1));
Стр = СокрЛ(Сред(Стр,Поз));
КонецЦикла;
Иначе
ДлинаРазделителя = СтрДлина(Разделитель);
Пока Истина Цикл
Поз = Найти(Стр,Разделитель);
Если Поз=0 Тогда
МассивСтрок.Добавить(Стр);
Возврат МассивСтрок;
КонецЕсли;
МассивСтрок.Добавить(Лев(Стр,Поз-1));
Стр = Сред(Стр,Поз+ДлинаРазделителя);
КонецЦикла;
КонецЕсли;

КонецФункции

Разделитель = "==";
Разделитель = "\""(.*?)(?:\""|$)|([^\" + Разделитель +"]+)";

LexaK

Если позволяет платформа или версия совместимости попробуйте использовать функция СтрРазделить
пример кода

Разделитель = "==";
лкСтрока = "2157421QDO,XWeyroAff91803992pyyiPI1JQ/u42pFGRQd/mCZ1Th6J4GSLf01PWgx0Y2ZeesQPBtB1/aqjDQ==2157421/ul0)N""SWGcWs918039926PeUH8YZ9l+1pAzCrtBloa3JGR/391QlOWjOBTrXKgy1czAOUj2locqXE0V01w==2157421W5K34Taq8g(wq91803992l4qVKTQ/0p+hB9TYKC2tWh41F9uaPjq3qBRQQpO5GB9ruusRrm8Nmd4GaPbwCg==";
рез = СтрРазделить(лкСтрока,Разделитель,Ложь);


результат, массив из трех строк
Цитировать
_Позиция   Значение
1   2157421QDO,XWeyroAff91803992pyyiPI1JQ/u42pFGRQd/mCZ1Th6J4GSLf01PWgx0Y2ZeesQPBtB1/aqjDQ
2   2157421/ul0)N"SWGcWs918039926PeUH8YZ9l+1pAzCrtBloa3JGR/391QlOWjOBTrXKgy1czAOUj2locqXE0V01w
3   2157421W5K34Taq8g(wq91803992l4qVKTQ/0p+hB9TYKC2tWh41F9uaPjq3qBRQQpO5GB9ruusRrm8Nmd4GaPbwCg
если помогло нажмите: Спасибо!

ShadowXak

Этот вариант не подходит, ну или я что либо не так делаю, но в таблицу пишется экранированая строка, обработка предназначена для постоянной загрузки csv файлов выданных честным знаком
https://yadi.sk/i/Q9TMWuGxr861gA

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск