Чтение большого файла csv в 1С
Куда ни глянь, в интернете чаще всего предлагается обработка и чтение большого файла csv в 1С при помощи загрузки в «текстовыйДокумент». Примерно так:
1 |
ТекстДок = Новый ТекстовыйДокумент;<br>ТекстДок.Прочитать(ИмяВременногоФайлаХар); <br>Для Индекс = 2 По ТекстДок.КоличествоСтрок() Цикл<br> СтрокаФайла = ТекстДок.ПолучитьСтроку(Индекс);<br>конеццикла; |
Что в корне не верно, при обработке большого csv файла, так как в этом случае весь файл вычитывается предварительно в память. А она не безразмерная в большинстве случаев. Правильный же способ обработки — построчное чтение файла. Примерно так:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
Текст = Новый ЧтениеТекста(ИмяВременногоФайлаХар, КодировкаТекста.ANSI); Стр = Текст.ПрочитатьСтроку(); Пока Стр <> Неопределено Цикл Сообщить(Стр); Стр = Текст.ПрочитатьСтроку(); МассивПодстрок = СтрРазделить(Стр, ";"); инф=Новый Структура("то,лс,ипу,окпу,нс,улица,дом,квартира"); инф.то =СокрЛП(МассивПодстрок[2]); инф.лс =СокрЛП(СтрЗаменить(МассивПодстрок[3],"-","")); инф.ипу =СокрЛП(МассивПодстрок[31]); инф.окпу =СокрЛП(МассивПодстрок[92]); инф.нс =СокрЛП(МассивПодстрок[8]); инф.улица =СокрЛП(МассивПодстрок[9]); инф.дом =СокрЛП(МассивПодстрок[10]); инф.квартира=СокрЛП(МассивПодстрок[11]); ИсходныеДанные.субабоненты.Добавить(инф); КонецЦикла; |