В ранее рассмотренном примере работы с текстовыми файлами содержимое файла загружалось в оперативную память полностью. При работе с файлами большого размера такой подход может привести к замедлению обработки данных из файла. В этом случае можно воспользоваться возможностью «1С:Предприятия» работать с текстовыми файлами в рамках модели последовательного доступа.
Данная модель реализована объектами ЗаписьТекста и ЧтениеТекста.
Для записи данных добавим команду ПоследовательнаяЗапись. Обработчик команды заполним следующим образом (листинг 6.38).
Листинг 6.38. Обработчик команды «ПоследовательнаяЗапись»
&НаКлиенте
Процедура ПоследовательнаяЗапись(Команда)
ЗаписьТекста = Новый ЗаписьТекста("c:\temp\doc_text3.txt", КодировкаТекста.UTF8);
ЗаписьТекста.ЗаписатьСтроку(СформироватьЗаголовок("Наименование компании"));
Если ПустаяСтрока(СтрокаРазделителя) Тогда
СтрокаРазделителя = ";";
КонецЕсли;
Текст = ПолучитьСтрокиСотрудников(СтрокаРазделителя);
ЗаписьТекста.ЗаписатьСтроку(Текст);
ЗаписьТекста.Закрыть();
КонецПроцедуры
В этом обработчике мы создаем объект ЗаписьТекста и с помощью метода ЗаписатьСтроку() построчно записываем заголовок документа и данные сотрудников в файл. Здесь, так же как и в случае с объектом ТекстовыйДокумент, строки элементов справочника Сотрудники мы получаем с сервера в виде одной большой строки функцией ПолучитьСтрокиСотрудников() и затем записываем на клиенте методом ЗаписатьСтроку() объекта ЗаписьТекста. Необходимо заметить, что в случае записи файлов большого размера строку для записи нужно разбивать на небольшие порции (например, ограничить размер записываемой строки 1000 элементами справочника).
Тексты функций СформироватьЗаголовок() и ПолучитьСтрокиСотрудников() приводились ранее (см. листинги 6.31 и 6.30).
Для чтения данных добавим команду ПоследовательноеЧтение. Обработчик команды заполним следующим образом (листинг 6.39).
Листинг 6.39. Обработчик команды «ПоследовательноеЧтение»
&НаКлиенте
Процедура ПоследовательноеЧтение(Команда)
Сообщение = Новый СообщениеПользователю();
Текст = Новый ЧтениеТекста("c:\temp\doc_text3.txt", КодировкаТекста.UTF8);
// Прочитать первую строку с заголовком.
ПрочитаннаяСтрока = Текст.ПрочитатьСтроку();
СтрокаЗаголовка = СтрРазделить(ПрочитаннаяСтрока, "-");
НазваниеОтправителя = СтрокаЗаголовка[0];
Сообщение.Текст = НазваниеОтправителя;
Сообщение.Сообщить();
ДатаТекстом = СтрокаЗаголовка[1];
Сообщение.Текст = ДатаТекстом;
Сообщение.Сообщить();
// Прочитать строки в цикле пока не будет достигнут конец файла.
Пока ПрочитаннаяСтрока <> Неопределено Цикл
ПрочитаннаяСтрока = Текст.ПрочитатьСтроку();
СтрокиСотрудников = СтрРазделить(ПрочитаннаяСтрока, СтрокаРазделителя);
Для Каждого Строка Из СтрокиСотрудников Цикл
Если НЕ ПустаяСтрока(Строка) Тогда
Сообщение.Текст = Строка;
Сообщение.Сообщить();
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
В этом обработчике мы создаем объект ЧтениеТекста и с помощью метода ПрочитатьСтроку()построчно считываем содержимое записанного ранее текстового файла. Сначала мы считываем строку заголовка. Остальные строки с данными сотрудников получаем последовательно по мере обхода содержимого текстового файла.
Для разбора строк мы используем функцию глобального контекста СтрРазделить().
Следует отметить, что чтение данных может осуществляться не только построчно, но и по указанному количеству символов (метод Прочитать() объекта ЧтениеТекста).