Расширение sqlite3_mod_csv или как быстро загрузить огромный файл csv или часть его в 1С 7.7

Обмен - Обмен с другими системами

Расширение к sqlite3 для выполнения sqli запросов к файлам csv и не только.

sqlite3_mod_csv

С csv можно работать и штатными способами 1c.

Но что случится если файл неприлично огромен? Ничего хорошего не будет...

Что делать если требуется не весь файл, а только какая то его часть по условию? Это тоже возможно, но... медленно...

А как насчет чтобы просто "select name from csv where code = 16"? Хочется? Попробуйте расширение sqlite3_mod_csv!

Оно сделано на основании модуля csv из http://www.ch-werner.de/sqliteodbc

Сделано/изменено следующее:

    - добавлены перекодировки текста из CP_OEMCP и CP_ACP;

    - расширены флаги обработки файла;

    - расширен и упрощен режим установки заголовков колонок;

    - сделан пример для 1С 7.7 чтения файла csv с использованием 1sqlite с подключенным модулем csv и отображения результата в ТабличноеПоле 1c++ через Поставщик данных SQLiteDataProvider в двух вариантах: прямое отображение файла csv и отображение через конвертацию файла csv в файл sqlite3, конвертация производится средствами sqlite3 с подключенным модулем;

Подключение расширения:
   SELECT load_extension("sqlite3_mod_csv","sqlite3_extension_init");

Подключение файла csv:
 CREATE VIRTUAL TABLE temp.csv USING csvfile(ИмяФайла,ФлагиОбработки,Кодировка,Разделители,ОграничителиСтроки,ОпределенияКолонок[*]);

Параметры подключения:
    ИмяФайла:
        в формате windows
    ФлагиОбработки:
        0 0x0000 - в файле нет заголовка
                 - имена колонок автоматически c1,c2,c3
                 - в определении колонок только типизация
        1 0x0001 - в файле есть заголовок и он не будет выведен в таблицу
        2 0x0010 - имена колонок из заголовка, если он есть
        4 0x0100 - в определении колонок имя и тип по очереди
    Кодировка:
        1 - CP_ACP
        2 - CP_OEMCP
        3 - CP_UTF8
        прочие значения - CP_UTF8
    Разделители:
        разделитель, по-умолчанию ";"
    ОграничителиСтроки:
        с этим я не очень разбирался, отрезает правую часть строки после второго появления разделителя
    ОпределенияКолонок:
        либо только типы, либо имена и типы по очереди в зависимости от флага обработки

        т.е. либо text,int,text,text либо col1,int,mycol2,text

Пример подключения журнала работы 1С 7.7:

    CREATE VIRTUAL TABLE temp.csv USING csvfile(каталог+'1cv7.mlg',0,1);

    Пример работы в обработке sqlite3_mod_csv.ert (она вложена в архив).

Требования к обработке:

     1С++, formex, 1sqlite с поддержкой загрузки расширений //infostart.ru/public/559826/

P.S. Если на каком то файле csv 1С будет вылетать или виснуть, присылайте его мне вместе со строкой подключения.

 

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

Наименование Файл Версия Размер
sqlite3_mod_csv_20180324
.zip 34,37Kb
24.03.18
0
.zip 34,37Kb Скачать

См. также

Комментарии
1. Сергей Коцюра (CheBurator) 3541 26.03.18 02:33 Сейчас в теме
2. Антон Азанов (Djelf) 226 26.03.18 09:51 Сейчас в теме
(1) Что так сразу капец? Оно у меня 130к строк mlg в секунду пережевывает...
И, кстати, к 7.7 оно не прибито, можно и с консольной sqlite3.exe использовать.
3. Сергей Коцюра (CheBurator) 3541 27.03.18 01:06 Сейчас в теме
А в пакете внутрях есть все что нужно для установки поставщика данных и прочего по доп.возможностям? для неграмотных?
4. Антон Азанов (Djelf) 226 27.03.18 09:28 Сейчас в теме
Скрин обработки то посмотри. Почти все в примере есть.
Оставьте свое сообщение