ADO CSV

1. keyn5565` 18 28.09.20 11:49 Сейчас в теме
Есть файл CSV. Сделал внешний отчет который формируется по этому файлу. В начале сделал через ТекстовыйДокумент. Но после столкнулся с проблемой производительности. Из за того что размер файла больше 30мб решил доработать чтение csv через ado. Но столкнулся с проблемой. Проблема заключается в том что я не могу получить коллекцию колонок из за специфичного содержания файла. Первые две строки содержат разделитель колонок.

Как можно пропустить в ado эти колонки что бы начать чтение строки с 3-й строки?

Код чтения:
Для Каждого Строкамассива из МассивАдресов Цикл
			
			УдалитьФайлы(ВременныйКаталог, "*");
			
			// Временный файл
			id		= id+1;
			ФайлИмя = "КК" + Строка(id) + ".csv";
			Путь    = ВременныйКаталог + ФайлИмя;//ПолучитьИмявременногоФайла(".csv");
			Файл    = ПолучитьИзВременногоХранилища(Строкамассива);
			
			Файл.Записать(Путь);
			
			Сon nectionString = "Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq="+ВременныйКаталог+";Extensions=asc,csv,tab,txt;";
						
			Попытка
				// Инициализация основного объекта ADODB.Connection. Открытие соединения.
				ADODBConnection = Новый COMОбъект("ADODB.Connection");
				ADODBConnection.ConnectionString =  СonnectionString;
				ADODBConnection.Open();
				// Импирически определенный параметр для правильного определения количества строк листа.
				ADODBConnection.CursorLocation = 3;    // По-умолчанию 2.
			Исключение
				Сообщить(НСтр("ru = '"+ОписаниеОшибки()+"'"), СтатусСообщения.Внимание);
				Возврат Новый ТаблицаЗначений;    // В случае ошибки возвращаем пустую таблицу значений.
			КонецПопытки;
						
			ТекстЗапроса  = "SEL ECT * FR OM ["+ФайлИмя+"]";
			
			// Создание Recordset. Дочерний объект ADODBConnection. Набор записей по запросу.
			Попытка
				ADODBRecordset = Новый COMОбъект("ADODB.Recordset");
				ADODBRecordset.Open(ТекстЗапроса, ADODBConnection);
				ADODBRecordset.MoveNext();
				ADODBRecordset.MoveNext();
				// Проверка заполненности листа.
				Если (ADODBRecordset.EOF ИЛИ ADODBRecordset.BOF) Тогда
					КолвоСтрокExcel = 0;
					//Сообщить(НСтр("ru = '" + ИмяЛиста + ": не содержит данных.'"), СтатусСообщения.Внимание);
					
					// Завершение работы.
					// Закрытие Объектов.
					ADODBRecordset.Close();
					ADODBConnection.Close();
					ADODBRecordset   = Неопределено;
					ADODBConnection = Неопределено;
					
					Возврат Новый ТаблицаЗначений;    // В случае ошибки возвращаем пустую таблицу значений.
				КонецЕсли;
				// Импирически определенные параметры для правильного определения количества строк листа.
				ADODBRecordset.AbsolutePage     = 1;
				ADODBRecordset.AbsolutePosition = 1;
			Исключение
				Сообщить(НСтр("ru = '"+ОписаниеОшибки()+"'"), СтатусСообщения.Внимание);
				Возврат Новый ТаблицаЗначений;    // В случае ошибки возвращаем пустую таблицу значений.
			КонецПопытки;
			
			// Параметр, возвращаемый в вызывающую процедуру.
			КолвоСтрокExcel = ADODBRecordset.RecordCount + 1;    // (+1) - учет Строки-Заголовока, которая "съедается".
			КолвоКолонокExcel = ADODBRecordset.Fields.Count;
			
		КонецЦикла;
Показать


Содержание файл:
"sep="
" "" "
Колонка1Колонка2Колонка3Колонка4

"sep" - это символ разделителя
По теме из базы знаний
Найденные решения
84. herfis 28.09.20 14:00 Сейчас в теме
Ну и все равно переделай чтение через ТекстовыйДокумент на через ЧтениеТекста, как я выше писал.
ТекстовыйДокумент заточен на произвольный доступ в памяти для небольших файликов и нелинейно тормозит на больших объемах.
А ЧтениеТекста - человеческое последовательное чтение из файла, производительность которого зависит от размеров файла исключительно линейно.
keyn5565`; nomad_irk; +2 Ответить
102. herfis 29.09.20 11:45 Сейчас в теме
(86) Это на тестовом файле проблема производительности не в этом. Но он же и файлы побольше собирался грузить. Поэтому эта оптимизация в любом случае будет не лишней, о чем я и написал. Это даже не оптимизация. Это просто использование надлежащего инструмента. А для оптимизации производительности на тестовом файле я еще в (38) соглашался, что необходимо оптимизировать преобразование типов.
keyn5565`; +1 Ответить
Остальные ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
98. TODD22 18 28.09.20 15:24 Сейчас в теме
(95)
От ADO отказался

Так оно бы ничем и не помогло. А чтение из csv построчно довольно быстро работает.
96. keyn5565` 18 28.09.20 15:23 Сейчас в теме
Спасибо всем за отзывчивость!
Оставьте свое сообщение
Вакансии
Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)

Программист 1С
Москва
зарплата от 250 000 руб.
Полный день

Программист 1C
Волгоград
зарплата от 200 000 руб.
Полный день

Аналитик
Санкт-Петербург
зарплата от 200 000 руб. до 250 000 руб.
Полный день