Тема: 1Cv8: чтение больших текстовых файлов (csv)
Сделано по этому принципу: VBScript: работа с большими текстовыми файлами.
Функция читает файл и возвращает ТаблицуЗначений с данными файла.
Функция Прочитать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();
Возврат ТаблЗнач;
КонецФункции
Помещение прочитанных строк в ТаблицуЗначений сделано "в лоб" и достаточно хорошо пожирает память (как сделать лучше, пока не знаю). Сама выборка из файла работает очень быстро. Файл размером 46 МБ (31 поле, 350 тыс. строк) был помещён в ТаблицуЗначений за порядка 12 минут (WinXP SP3, Pentium(R) Dual-Core CPU E5300 2.60 ГГц, 988 Mб ОЗУ).
В названии ветки всегда должен быть указан язык программирования или среда исполнения скрипта, если это возможно.