Данное решение пришло в момент, когда получил задание - прочитать и записать в регистр сведений CSV файлы (файлы с разделителями) ОГРОМНОГО объема. Объем одного файла варьировался от 400мб до 1.2 гб. Всего 16 колонок и не менее 5млн строк. разделитель был стандартный - ;
В общем. Пример.
Есть файл, в котором 5 колонок и 15000 строк. Конечно, самое долгое - перевод в структуру = 8 секунд. Но чтение из структуры занимает менее секунды. Повторять тоже самое только на 1С не стал, просто не было времени.
Следующий пример. Есть файл объемом 425мб. У него 16 колонок и 5146379 строк. Чтение его в структуру 1с с разбивкой на файлы объемом 100мб заняло 78 минут. т.е. примерно 1 час и 20 минут.
Итог - 12 файлов. 11 из них по 100 мб, 1 всего 9 мб. Чтение оного из файлов в ТЗ и вывод на форму в 1с заняло 8 секунд. И всего 425673 строки
Возможности компоненты:
1. Разбивка файла на несколько файлов необходимого объема.
2. Компонентка обрабатывает "Выделенные" кавычками значения. На картинках пример.
Пример команды использования компоненты и описание передаваемых параметров:
Пример "csvreader.exe /f:ИмяФайлаСРазделителями.csv /s:; /m:1 /d:3 /l:100 "
/f: - Аргумент имени файла или пути к файлу
/s: - Аргумент Разделитель
/m: - Аргумент строки с метаданными (строка колонок). Передаем число.
/d: - Аргумент первой строки с данными. Передаем число.
/l: - Аргумент органичения размера файла в килобайтах. В случае не ввода данного аргумента файл разделяться не будет
/h: - Вызвать справку по командам
/a: - Аргумент запроса подтверждения об окончании работы. По умолчанию - Истина. Принимаются 0,1,false,true
/e: - Аргумент кодировки. пример /e:1251, /e:utf8. По умолчанию - UTF8
Не обязательно расширение файла CSV. Можно хоть txt.
Чучуть подробнее -
/s:разделитель - тут думаю все понятно
/m:НомерСтроки - Номер строки. в которой находятся колонки
/d:НомерСтроки - Номер первой строки, несущей данные.
Это основные параметры. Другие описывать не буду, их достаточно просто понять.
В архиве, который я прикрепляю к данной статье находятся файлы:
csvReader.exe - сама компонента
CSVConverter.epf - внешняя обработка 1С на управляемых формах. В неё уже внедрена компонента, все настроено. Вам остается только ввести номера строк и выбрать файл на чтение.
test.csv - Тот самый файл. 5 колонок и 15000 строк.
UPD 1.0
1. В случае, если копонента не может разобрать строку, она сохраняет данную строку рядом с исходным файлом в файл с расширением error
2. В внешней обработке 1С были ошибки, исправил.
UPD 1.1
1. Добавлена возможность указывать кодировку, параметр "/e". Описан выше
UPD 1.2
1. Параметр "/m" стал не обязательным, если его не указывать, колонки будут созданы автоматически. Column1, Cloumn2.... Удобно в случае, если в документе нет колонок.