Универсальный парсер CSV-файлов

22.10.15

Интеграция - WEB-интеграция

В интернете довольно много примеров, как парсить CSV-файл.
Но ни один из них не смог сразу прочитать правильно CSV-файл от MS Exchange!
Данный парсер не только может корректно это сделать, но и читает любые CSV-файлы от других программ.

Скачать файлы

Наименование Файл Версия Размер
УниверсальныйПарсерCSVФайлов
.epf 12,50Kb
47
.epf 1.01 12,50Kb 47 Скачать

CSV (от англ. Comma-Separated Values — значения, разделённые запятыми) — текстовый формат, предназначенный для представления табличных данных. Каждая строка файла — это одна строка таблицы. Значения отдельных колонок разделяются разделительным символом (delimiter) — запятой (,). Однако, большинство программ вольно трактует стандарт CSV и допускают использование иных символов в качестве разделителя. 

 

За основу кода взята типовая функция РазложитьСтрокуВМассивПодстрок.

// Функция "расщепляет" строку на подстроки, используя заданный 
//		разделитель. Разделитель может иметь любую длину. 
//		Если в качестве разделителя задан пробел, рядом стоящие пробелы 
//		считаются одним разделителем, а ведущие и хвостовые пробелы параметра Стр
//		игнорируются.
//		Например, 
//		РазложитьСтрокуВМассивПодстрок(",ку,,,му", ",") возвратит массив значений из пяти элементов, 
//		три из которых - пустые строки, а 
//		РазложитьСтрокуВМассивПодстрок(" ку   му", " ") возвратит массив значений из двух элементов
//
//	Параметры: 
//		Стр - 			строка, которую необходимо разложить на подстроки. 
//						Параметр передается по значению.
//		Разделитель - 	строка-разделитель, по умолчанию - запятая.
//
//
//	Возвращаемое значение:
//		массив значений, элементы которого - подстроки
//
Функция РазложитьСтрокуВМассивПодстрок(Знач Стр, Разделитель = ",") Экспорт
	
	МассивСтрок = Новый Массив();
	Если Разделитель = " " Тогда
		Стр = СокрЛП(Стр);
		Пока Истина Цикл
			Поз = Найти(Стр,Разделитель);
			Если Поз=0 Тогда
				МассивСтрок.Добавить(Стр);
				Возврат МассивСтрок;
			КонецЕсли;
			МассивСтрок.Добавить(Лев(Стр,Поз-1));
			Стр = СокрЛ(Сред(Стр,Поз));
		КонецЦикла;
	Иначе
		ДлинаРазделителя = СтрДлина(Разделитель);
		Пока Истина Цикл
			Поз = Найти(Стр,Разделитель);
			Если Поз=0 Тогда
				МассивСтрок.Добавить(Стр);
				Возврат МассивСтрок;
			КонецЕсли;
			МассивСтрок.Добавить(Лев(Стр,Поз-1));
			Стр = Сред(Стр,Поз+ДлинаРазделителя);
		КонецЦикла;
	КонецЕсли;
	
КонецФункции // глРазложить

Это функция дополнена параметром СимволВыделения! Этот параметр решает проблему выделения ячеек, в которых присутствует разделитель.

В разработке использовался код: Работа в 1С с CSV файлами. 

Для ознакомления в модуле есть код: //infostart.ru/public/98398/.

Обновление от 30.10.2015

Дописан алгоритм вычленения ячеек, в которых есть и символ разделитель, и символ выделения.

Например, строка: "Ответ на письмо", мой друг" доставлен".  Вернятся как: Ответ на письмо", мой друг" доставлен.

В прошлой версии результат был: Ответ на письмо| мой друг" доставлен.

CSV парсер

См. также

Интеграция Альфа Авто 5 / Альфа Авто 6 и AUTOCRM / Инфотек

Сайты и интернет-магазины WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 1С:Управление торговлей 11 Автомобили, автосервисы Россия Управленческий учет Платные (руб)

Интеграционный модуль обмена между конфигурацией Альфа Авто 5 и Альфа Авто 6 и порталом AUTOCRM. Данный модуль универсален. Позволяет работать с несколькими обменами AUTOCRM разных брендов в одной информационной базе в ручном и автоматическом режиме. Без существенных изменений типовой конфигурации. Проверено с брендами: Интеграция 1С и GEELY Интеграция 1С и HAVAL Интеграция 1С и KIA Интеграция 1С и FORD Интеграция 1С и LADA ГАРАНТИЯ 100% ВНЕДРЕНИЯ!

36000 руб.

03.08.2020    15744    10    17    

11

Интеграция 1С — Битрикс24. Обмен задачами

Сайты и интернет-магазины Интеграция WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 Управленческий учет Платные (руб)

Интеграция 1С и Битрикс24. Разработка имеет двухстороннюю синхронизацию 1С и Битрикс24 задачами. Решение позволяет создавать пользователя в 1С из Битрикс24 и наоборот. Данная разработка технически подходит под все основные конфигурации линейки продуктов 1С:Предприятие 8.3 (8.3.18.1289). При приобретении предоставляется 1 месяц бесплатных обновлений разработки. Доступна демо-версия продукта с подключением Вашего Битрикс24

5040 руб.

04.05.2021    17547    6    15    

13

Интеграция с сервисом vetmanager

WEB-интеграция Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Бытовые услуги, сервис Платные (руб)

Внешняя обработка разрабатывалась для загрузки документов из Ветменеджер в 1С: Бухгалтерия 3.0

12000 руб.

02.02.2021    16358    42    49    

23

[Расширение] БОР-Навигатор.Культура

Зарплата Бюджетный учет WEB-интеграция Обмен с ГосИС Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бюджетный учет Платные (руб)

Расширение конфигурации, включающее в себя объекты, необходимые для подготовки и сдачи отчета "Штатная численность" системы "БОР-Навигатор.Культура" в программе "1С:Зарплата и кадры государственного учреждения", редакция 3.1.

8400 руб.

01.02.2019    25736    9    0    

7

Заполнение по ИНН или наименованию реквизитов контрагента по данным сайта ФНС

Обмен с ГосИС WEB-интеграция Платформа 1С v8.3 Управляемые формы 1С:Комплексная автоматизация 1.х 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия государственного учреждения 1С:Документооборот 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Платные (руб)

Обработка является альтернативой механизму, разработанному фирмой 1С и заполняющему реквизиты контрагента по ИНН или наименованию. Не требуется действующей подписки ИТС. Вызывается как внешняя дополнительная обработка, т.е. используется, непосредственно, из карточки контрагента. Заполнение по ИНН или наименованию реквизитов контрагента по данным сайта ФНС (egrul.nalog.ru) для БП 2.0, БП 3.0, БГУ 1.0, БГУ 2.0, УТ 10.3, УТ 11.x, КА 1.1, КА 2.x, УПП 1.x, ERP 2.x, УНФ 1.5, УНФ 1.6, УНФ 3.0, ДО 2.1

2400 руб.

28.04.2016    88578    160    215    

318
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Yashazz 4709 27.10.15 00:29 Сейчас в теме
Автор, а вы в курсе, что читать csv-файлы как текст - это жесть, допустимая только при маленьком их размере или откровенно кривом формате? Это я к тому, что заголовочек у публикации больно сомнителен - "универсальный парсер", ага. Универсальные, во-первых, давно есть, а во-вторых, не через "Разложить строку" делаются)
2. Xershi 1474 27.10.15 08:43 Сейчас в теме
(1) Yashazz, покажите мне универсальный, ссылку пожалуйста!
Давайте я вам дам файл, а вы мне его корректно вашим парсером разложите?
3. V.Nikonov 120 29.10.15 13:33 Сейчас в теме
А как быть со строковыми колонками которые в тексте содержат разделитель? По стандарту такие значения заключают в кавычки, и тогда разделитель до закрывающей кавычки не анализируется!
4. Xershi 1474 29.10.15 13:39 Сейчас в теме
(3) V.Nikonov, после тестирования парсера на большом массиве строк, доработал код. Но пока нет времени обновить файл публикации. Так что в скором времени и этот вопрос будет решен.

Но даже в текущей версии такую строку распарсит корректно, если рядом не будет символа выделения!
5. Xershi 1474 13.11.15 09:08 Сейчас в теме
Немного статистики. CSV-файл более 2 ГБ обработка не смогла даже прочитала, т.к. просто вылетела платформа. А вот файл менее 1 ГБ обработало, но на 97% не хватило памяти на сервере и тоже вылет (процесс 1С использовал почти 3 гига оперативной памяти).

Файл в 680 МБ с трудом дочитало (процесс 1С использовал почти 2.5 гига оперативной памяти).

Файлы с меньшим объемом без проблем читает.

Все операции выполнялись на 32-битном процессе. Как поведет себя обработка в регламентном задании, пока не могу сказать, но там используется 64-битный процесс, поэтому ограничение на память там больше.

Познавательно по этому поводу написано на этом сайте: http://www.viva64.com/ru/k/0036/
6. BigB 191 04.02.16 11:36 Сейчас в теме
(0) функция РазложитьСтрокуВМассивПодстрокMSExchange работает неверно!
Как видно из вложений в Excel csv открывается правильно, а в 1С неправильно.
Из Вашей обработки я взял только одну функцию.
Прикрепленные файлы:
7. Xershi 1474 04.02.16 11:49 Сейчас в теме
(6) BigB, вы настройки для своего конфигурации сделали? На скриншотах этого я не увидел.
8. BigB 191 04.02.16 13:02 Сейчас в теме
(7) повторю еще раз: Из Вашей обработки я взял только одну функцию.
Запускал её с параметрами так:
МассивКол = РазложитьСтрокуВМассивПодстрокMSExchange(Строка, ";", """");
9. Xershi 1474 04.02.16 13:12 Сейчас в теме
(8) BigB, так с такими параметрами, она будет работать по другому. Как типовая. Используйте полный список параметров!
10. BigB 191 04.02.16 13:56 Сейчас в теме
(9) приложил настройки из обработки.
Только я не понял, чем они отличаются от моих, что я выложил ранее?
Специально проверил Вашу загрузку. Мало того, что она не отработала нормально даже шапку файла, так и табличная часть была пустой!
Прикрепленные файлы:
11. Xershi 1474 04.02.16 13:59 Сейчас в теме
(10) BigB, у вас шапка есть? Похоже строки шапки либо нет, либо разделитель у вас не тот. Взять только эту функцию будет не достаточно для корректной работы всего алгоритма! Используйте обработку полностью!
12. BigB 191 04.02.16 14:10 Сейчас в теме
(11) Вы почему не умеете читать, то, что Вам пишут? Я же Вам только, что написал и картинки приложил. Повторю ещё раз: При использовании Вашей обработки с настройками, которые я уже выкладывал - я получил кривую шапку (только последнюю колонку) и пустую табличную часть. В личку могу выслать csv файл, чтобы Вы сами убедиться, что функция РазложитьСтрокуВМассивПодстрокMSExchange не работает.
13. Xershi 1474 04.02.16 14:18 Сейчас в теме
(12) BigB, скиньте в личку ваш файл. Важным нюансом также является, чтобы названия колонок шапки писались слитно!
Думаю именно из-за этого у вас и не работает все. Поэтому, если вы весь алгоритм работы не разобрали, то такой результат и получили!
14. Xershi 1474 04.02.16 15:40 Сейчас в теме
Ваш файл не по стандарту сделан.
1. а.) В шапке нет разделителя! б.) И слова содержат пробелы. Для а.) я делал обновление http://infostart.ru/public/411000/. Для б.) убрать пробелы или заточить обработку под удаление пробелов в шапке.
2. У вас разное количество колонок. В шапке 35, а в данных 36. Решается добавлением в шапку 36 колонки.
15. kuzyara 1900 22.08.16 15:24 Сейчас в теме
16. ZLENKO 398 08.11.17 15:31 Сейчас в теме
Реализовано в версии 8.3.6.1977 функции: СтрРазделить(), СтрСоединить()
Читаем тут: https://infostart.ru/public/366865/
Оставьте свое сообщение