ЧтениеДанных.РазделитьНаЧастиПо

Методы · SplitInPartsOf

Разделяет остаток данных на части заданного размера. Размер части указывается в байтах.

Синтаксис

РазделитьНаЧастиПо(<РазмерЧасти>)
Полное описание, параметры и ограничения

ЧтениеДанных.РазделитьНаЧастиПо (DataReader.SplitInPartsOf)

ЧтениеДанных (DataReader)

РазделитьНаЧастиПо (SplitInPartsOf)

Доступен, начиная с версии 8.3.9.

Синтаксис:
РазделитьНаЧастиПо(<РазмерЧасти>)
Параметры:

<РазмерЧасти> (обязательный)
Тип: Число.
Размер части данных в байтах.
Возвращаемое значение:
Тип: Массив.
Массив значений типа РезультатЧтенияДанных.
Описание:

Разделяет остаток данных на части заданного размера. Размер части указывается в байтах.

Доступность:

Тонкий клиент, сервер, толстый клиент, внешнее соединение.

См. также:
ЧтениеДанных, метод РазделитьНаЧастиПоАсинх

Использование в версии:

Доступен, начиная с версии 8.3.9.

Описание изменено в версии 8.3.18.

Методическая информация

Практические примеры

Разделить собственные данные на порции 3/3/3/1 байт и собрать обратно

Части результата можно передать ЗаписьДанных без промежуточного преобразования каждой части в строку.

Где и как запускать

Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.

Подготовка

  1. Используйте отдельную учебную базу. Фрагмент без директив вставьте в тело серверной процедуры ВыполнитьПример() Экспорт общего модуля УчебныеЗадачи.

  2. Все исходные байты создаются самим примером в памяти. Файлы, сеть, справочники и документы не нужны.

  3. Запускайте задачи отдельно. После закрытия ЧтениеДанных/ЗаписьДанных не используйте этот экземпляр повторно.

Данные = ПолучитьДвоичныеДанныеИзСтроки("ABCDEFGHIJ", КодировкаТекста.UTF8, Ложь);
Чтение = Новый ЧтениеДанных(Данные);
Попытка
    Части = Чтение.РазделитьНаЧастиПо(3);
Исключение
    Чтение.Закрыть();
    ВызватьИсключение;
КонецПопытки;
Чтение.Закрыть();
Сообщить(Части.Количество() = 4);
Сообщить(Части[0].Размер = 3 И Части[1].Размер = 3 И Части[2].Размер = 3 И Части[3].Размер = 1);
Поток = Новый ПотокВПамяти;
Запись = Новый ЗаписьДанных(Поток);
Попытка
    Для Каждого Часть Из Части Цикл
        Запись.Записать(Часть);
    КонецЦикла;
Исключение
    Запись.Закрыть();
    Поток.Закрыть();
    ВызватьИсключение;
КонецПопытки;
Запись.Закрыть();
Собрано = Поток.ЗакрытьИПолучитьДвоичныеДанные();
Сообщить(Собрано.Размер() = 10);
Сообщить(ПолучитьСтрокуИзДвоичныхДанных(Собрано, КодировкаТекста.UTF8) = "ABCDEFGHIJ");

Разбор по шагам

  1. Создаём десять ASCII-байтов без BOM и делим остаток источника на части по три байта.

  2. Метод возвращает массив РезультатЧтенияДанных. Последняя часть короче, если длина не кратна размеру порции.

  3. Чтение закрывается после получения частей; каждый результат хранит собственное описание прочитанной части.

  4. Записать принимает непосредственно РезультатЧтенияДанных. Порядок элементов массива сохраняем.

  5. Закрываем запись до извлечения результата из потока и сравниваем восстановленный текст целиком.

Как проверить результат

  1. Размеры четырёх частей 3, 3, 3, 1; восстановленные данные содержат десять байтов.

  2. Все четыре сравнения Истина; восстановленный текст ABCDEFGHIJ.

Ожидаемый результат

Выполнен законченный цикл разделения и сборки байтов без файлов.

На что обратить внимание

  1. Размер порции должен быть положительным. Не передавайте 0.

  2. РазделитьНаЧастиПо не понимает структуру файла и может разрезать UTF-8 символ, XML-тег или запись протокола.

  3. Не декодируйте каждую такую порцию отдельно; сначала собирайте байты либо используйте текстовые границы.

  4. Массив всех частей тоже требует ресурсов. Это маленький учебный набор, не обещание неограниченной памяти.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.