Книга: Технологии интеграции "1С:Предприятия 8.3""
Назад: Отображение текстового документа
Дальше: XML-файлы

Модель последовательного доступа

В ранее рассмотренном примере работы с текстовыми файлами содержимое файла загружалось в оперативную память полностью. При работе с файлами большого размера такой подход может привести к замедлению обработки данных из файла. В этом случае можно воспользоваться возможностью «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];

Сообщение.Текст = ДатаТекстом;

Сообщение.Сообщить();

 

// Прочитать строки в цикле пока не будет достигнут конец файла.

Пока ПрочитаннаяСтрока <> Неопределено Цикл

ПрочитаннаяСтрока = Текст.ПрочитатьСтроку();

СтрокиСотрудников = СтрРазделить(ПрочитаннаяСтрока, СтрокаРазделителя);

 

Для Каждого Строка Из СтрокиСотрудников Цикл

Если НЕ ПустаяСтрока(Строка) Тогда

Сообщение.Текст = Строка;

Сообщение.Сообщить();

КонецЕсли;

КонецЦикла;

 

КонецЦикла;

 

КонецПроцедуры

В этом обработчике мы создаем объект ЧтениеТекста и с помощью метода ПрочитатьСтроку()построчно считываем содержимое записанного ранее текстового файла. Сначала мы считываем строку заголовка. Остальные строки с данными сотрудников получаем последовательно по мере обхода содержимого текстового файла.

Для разбора строк мы используем функцию глобального контекста СтрРазделить().

Следует отметить, что чтение данных может осуществляться не только построчно, но и по указанному количеству символов (метод Прочитать() объекта ЧтениеТекста).

Назад: Отображение текстового документа
Дальше: XML-файлы