Чтение CSV (быстрое)
Почему то из гугла до сих пор нет ссылки на код процедуры быстро читающей csv…
Загрузка из файла CSV c помощью ADODB.Connection провайдера Microsoft.Jet.OLEDB.
- Описание
- Подробнее
Описание
Чтение данных csv файла с помощью ADODB.Connection
&НаСервереБезКонтекста
Функция ПрочитатьCSVвТЗ_ADO(ИмяФайла, Разделитель=";", ЗаголовкиИзПервойСтроки = Ложь)
ТаблицаРезультат = Новый ТаблицаЗначений;
Файл = Новый Файл(ИмяФайла);
Connection=Новый COMОбъект("ADODB.Connection");
Connection.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+Файл.Путь+";Extended Properties=""text;HDR=No;IMEX=1;FMT=Delimited""");
// Так как FMT=Delimited(;) не работает создадим schema.ini
Схема = СтрШаблон("[%1]
|ColNameHeader=%2
|Format=Delimited(%3)", Файл.Имя, Формат(ЗаголовкиИзПервойСтроки, "БЛ=False; БИ=True"), Разделитель);
ФайлСхемы = Новый ТекстовыйДокумент;
ФайлСхемы.УстановитьТекст(Схема);
ФайлСхемы.Записать(Файл.Путь + "Schema.ini", "CESU-8"); // UTF-8 без BOM
RecordSet=Новый COMОбъект("ADODB.Recordset");
RecordSet.ActiveConnection = Connection;
RecordSet.Open("select * from "+Файл.Имя, Connection);
// определим имена колонок
Для НомерКолонки = 0 по RecordSet.Fields.Count-1 Цикл
ТаблицаРезультат.Колонки.Добавить(RecordSet.Fields(НомерКолонки).Name);
КонецЦикла;
Сч=0;
Пока НЕ RecordSet.EOF() Цикл
Сч=Сч+1;
НоваяСтрока = ТаблицаРезультат.Добавить();
Для й=0 по RecordSet.Fields.Count-1 Цикл
НоваяСтрока[й] = RecordSet.Fields(й).Value;
КонецЦикла;
RecordSet.MoveNext();
КонецЦикла;
RecordSet.Close();
Connection.Close();
Возврат ТаблицаРезультат;
КонецФункции

