Каталог решений - Чтение больших текстовых файлов (CSV)

Чтение больших текстовых файлов (CSV)

Чтение больших текстовых файлов (CSV)

В наличии

Две функции чтения CSV файла и возврата Таблицы Значений с данными файла с использованием COM объекта ADODB.Recordset и внешней компоненты GameWithFire.

Категория:

Описание

Не люблю изобретать велосипед, поэтому первое что делаю при необходимости его изобрести пользуюсь поиском.

Делюсь результатом моих поисков (абсолютный копи-паст), который, думаю, поможет и другим, на форуме есть пара не закрытых веток на эту тему. А для моего случая (загрузка большого количества csv файлов в ТЗ) — лучше и не надо.

Файлы с кавычкими и вложенными запятым обрабатываются верно. Например файл с содержанием:
клиент;адрес
ИП Иванов А.А.;»Москва;ул.Ленина;53″

вернет ТЗ в 2 колонки

клиентадрес
ИП Иванов А.А.Москва;ул.Ленина;53

 

Спасибо автору данного решения The gray Cardinal.

Публикуется с согласия автора.

Первоисточник и сами функции


Функция ПрочитатьCSV(Папка, ИмяФайла, КолПолей)

    // Параметры:

    // «Папка» — путь к файлу без имени файла с завершающим слешем,

    // «ИмяФайла» — имя файла,

    // «КолПолей» — количество колонок (число).

    // Функция возвращает ТаблицуЗначений с данными файла.

    Текст = «[» + ИмяФайла + «]

    |ColNameHeader=False

    |Format=Delimited(;)

    |TextDelimiter=none

    |CharacterSet=ANSI

    |»;

    Для ы = 1 По КолПолей Цикл

        Текст = Текст + «Col» + ы + «=Field» + ы + » Text» + Символы.ПС;

    КонецЦикла;

    ТекстДок = Новый ТекстовыйДокумент;

    ТекстДок.УстановитьТекст(Текст);

    ТекстДок.Записать(Папка + «Schema.ini»);

    objRec = Новый COMОбъект(«ADODB.Recordset»);

    strQuery = «SELECT * FROM [» + ИмяФайла + «]»;

    strConn = «Provider=Microsoft.Jet.OLEDB.4.0;Data Source=» + Папка + «;Extended Properties=»»text;»»»;

    adOpenStatic = 3;

    adLockOptimistic = 3;

    adCmdText = 1;

    ТаблЗнач = Новый ТаблицаЗначений;

    Для ы = 1 По КолПолей Цикл

        ТаблЗнач.Колонки.Добавить();

    КонецЦикла;

    objRec.Open(strQuery, strConn, adOpenStatic, adLockOptimistic, adCmdText);

    КолСтрок = objRec.RecordCount;

    Ном = 1;

    Пока Не objRec.EOF Цикл

        Если Ном % 500 = 0 Тогда

            Состояние(ИмяФайла + » » + Ном + » из » + КолСтрок);

        КонецЕсли;

        НовСтр = ТаблЗнач.Добавить();

        Для i=0 По objRec.Fields.Count—1 Цикл

            НовСтр[i] = Строка(objRec.Fields(i).Value);

        КонецЦикла;

        objRec.MoveNext();

        Ном = Ном + 1;

    КонецЦикла;

    objRec.Close();

    Возврат ТаблЗнач;

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


Функция ПрочитатьCSV_2(Папка, ИмяФайла, КолПолей)

    // Параметры:

    // «Папка» — путь к файлу без имени файла с завершающим слешем,

    // «ИмяФайла» — имя файла,

    // «КолПолей» — количество колонок (число).

    // Функция возвращает ТаблицуЗначений с данными файла.

    Текст = «[» + ИмяФайла + «]

    |ColNameHeader=False

    |Format=Delimited(;)

    |TextDelimiter=none

    |CharacterSet=ANSI

    |»;

    Для ы = 1 По КолПолей Цикл

        Текст = Текст + «Col» + ы + «=Field» + ы + » Text» + Символы.ПС;

    КонецЦикла;

    ТекстДок = Новый ТекстовыйДокумент;

    ТекстДок.УстановитьТекст(Текст);

    ТекстДок.Записать(Папка + «Schema.ini»);

    objRec = Новый COMОбъект(«ADODB.Recordset»);

    strQuery = «SELECT * FROM [» + ИмяФайла + «]»;

    strConn = «Provider=Microsoft.Jet.OLEDB.4.0;Data Source=» + Папка + «;Extended Properties=»»text;»»»;

    adOpenStatic = 3;

    adLockOptimistic = 3;

    adCmdText = 1;

    objRec.Open(strQuery, strConn, adOpenStatic, adLockOptimistic, adCmdText);

    ПодключитьВнешнююКомпоненту(«GameWithFire.ADOUtils»);

    ADOUtils = Новый(«AddIn.ADOUtils»);

    Возврат ADOUtils.ADORecordsetToValueTable(objRec);

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

has been added to your cart:
Оформление заказа