Имя: Пароль:
1C
1С v8
CSV и ADO
0 Cool_Profi
 
12.04.18
11:47
Вот есть код

    Текст = "[" + ИмяФайла + "]
    |ColNameHeader=True
    |Format=Delimited(;)
    |TextDelimiter=none
    |CharacterSet=UTF-8
    |";

    Для ы = 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;HDR=Yes;FMT=Delimited""";
    
    сообщить("" + strConn);
    
    adOpenStatic = 3;
    adLockOptimistic = 3;
    adCmdText = 1;

    Попытка
        objRec.Open(strQuery, strConn, adOpenStatic, adLockOptimistic, adCmdText);
    Исключение
        Сообщить(ОписаниеОшибки());
        Возврат Неопределено;
    КонецПопытки;

В результате objRec.Fields.Count == 2
Хотя в файле 15 колонок.

Что и где я деалю не так?
1 tesseract
 
12.04.18
14:33
(0) А зачем ADO привязывать? Через ЧтениеТекста и СтрРазделить быстрее выйдет.

Возможно в файлик попадают символы ВК или ПС, и парсер у ADO сбоит.
2 Cool_Profi
 
12.04.18
14:36
(1) Там есть куски с кавычками, руками не хотелось парсить.
Но убедили разработчиков, и они все сомнительные места убрали.
И да, у меня нет СтрРазделить(), у меня древняя версия 1с
3 Kigo_Kigo
 
12.04.18
14:39
чет понять не могу , что вы пытаетесь сделать с CSV ?
4 tesseract
 
12.04.18
14:40
(3) Распарсить в ТЗ.
5 Cool_Profi
 
12.04.18
14:44
(3) Прочитать. Удалить я его мог бы и без АДО.
6 Kigo_Kigo
 
12.04.18
15:48
(4) (5)
csv это текстовик с разделителем, распапаси как текст с разделителями, дело в то?
7 tesseract
 
12.04.18
15:49
(6) Уже предлагал :-)
8 Cool_Profi
 
12.04.18
15:50
(6) Мы не любим читать всю тему?
9 VS-1976
 
12.04.18
16:25
Попробуй так:

Текст = "[" + ИмяФайла + "]
    |ColNameHeader=True
    |Format=Delimited(;)
    |CharacterSet=UTF-8
    |";

Provider=Microsoft.ACE.OLEDB.12.0;Data Source=""" + Папка + """;Extended Properties=""Text;FMT=Delimited"""
10 Cool_Profi
 
12.04.18
16:31
(9) В смысле убрать HDR? пробовал.
Я уже написал парсинг свой... Но ответ был бы полезен, ибо файл может, де-факто, быть по 10-15 тыс строк, хотелось бы разгрузить сервер
11 Сияющий в темноте
 
12.04.18
20:00
адо же поднимает весь файл в память-нифига себе разгрузочка
12 Cool_Profi
 
12.04.18
20:04
(11) Ну как тебе сказать. Чтение екселя по адо по сравнению с чтением из екселя - на пару порядков быстрее...
13 VS-1976
 
12.04.18
20:18
(10) Provider=Microsoft.Jet.OLEDB.4.0; давно не используется. Попробуй Provider=Microsoft.ACE.OLEDB.12.0;
14 shuhard
 
12.04.18
20:34
(11) скорость чтения через adodb на порядок выше,а расход памяти на порядок меньше
15 tesseract
 
12.04.18
20:53
(14) Пруфы будут? Во времена 7.7 может так и было, после появления потоков в 8.3  разница в пользу 1С.
16 jbond
 
12.04.18
22:16
Господи, спасибо тебе, что в дотнете есть CsvHelper
17 jbond
 
12.04.18
22:24
Сегодня успешно распарсил текстовое представление таблицы из жиры

|somefield|somemorefiled|mydate|
|78787|898981|08.04.2018|
|1111|9829857|10.04.2018|
18 tesseract
 
12.04.18
23:09
(17) Да на самом деле могу выложить код - просто неясно какая у ТС платформа. Я уже сильно привык к 8.3 с ее потоками и отложенным чтением.
19 Сияющий в темноте
 
13.04.18
10:16
Стандартный в 8.х обьект чтение текста не грузит весь текст в память и должен на больших файлах оказаться быстрее адо
в семерке такого обьекта не было,но был стандартный Scripting.TextStream,ко орый также читает построчно
в случае с екселем мы сравниваем работу с длл в нашем процессе и работу с приложением через границу процесса