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

Методы · SplitInPartsOfAsync

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

Синтаксис

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

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

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

РазделитьНаЧастиПоАсинх (SplitInPartsOfAsync)

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

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

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

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

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

Тонкий клиент, толстый клиент.

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

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

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

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

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

Асинхронно разделить текстовые записи и байтовые порции

Сравниваем разделение AA|BBB по границе и разделение того же набора на порции по два байта. Это разные операции с разным смыслом.

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

Модуль пустой управляемой формы учебной внешней обработки; тонкий или толстый клиент Windows. Вставьте весь модуль. Это не серверный код.

Подготовка

  1. Создайте учебную внешнюю обработку с пустой управляемой основной формой. Создайте команду УчебныйПример и кнопку этой команды.

  2. В свойстве команды Действие выберите процедуру УчебныйПример. Вставьте полный приведённый модуль формы.

  3. Откройте EPF в тонком или толстом клиенте Windows и нажмите кнопку. Не переносите Ждать и Асинх в серверный общий модуль.

  4. Пример работает только со своими данными в памяти; записи в базу, файлы и сеть нет.

&НаКлиенте
Асинх Процедура УчебныйПример(Команда)
    Данные = ПолучитьДвоичныеДанныеИзСтроки("AA|BBB", КодировкаТекста.UTF8, Ложь);
    Чтение = Новый ЧтениеДанных(Данные, КодировкаТекста.UTF8);
    Попытка
        Записи = Ждать Чтение.РазделитьАсинх("|");
        Сообщить(Записи.Количество() = 2);
        Сообщить(Записи[0].Размер = 2 И Записи[1].Размер = 3);
        Ждать Чтение.ЗакрытьАсинх();
    Исключение
        Чтение.Закрыть();
        ВызватьИсключение;
    КонецПопытки;
    Чтение = Новый ЧтениеДанных(Данные);
    Попытка
        Порции = Ждать Чтение.РазделитьНаЧастиПоАсинх(2);
        Сообщить(Порции.Количество() = 3);
        Сообщить(Порции[0].Размер = 2 И Порции[1].Размер = 2 И Порции[2].Размер = 2);
        Середина = Ждать Порции[1].ПолучитьДвоичныеДанныеАсинх();
        Сообщить(ПолучитьСтрокуИзДвоичныхДанных(Середина, КодировкаТекста.UTF8) = "|B");
        Ждать Чтение.ЗакрытьАсинх();
    Исключение
        Чтение.Закрыть();
        ВызватьИсключение;
    КонецПопытки;
КонецПроцедуры

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

  1. Шесть исходных байтов содержат текстовые записи AA и BBB, разделённые |.

  2. РазделитьАсинх по | возвращает две части без границы: длины 2 и 3.

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

  4. РазделитьНаЧастиПоАсинх(2) возвращает три двухбайтовые порции AA, |B, BB. Он не считает | разделителем.

  5. Проверка среднего фрагмента |B показывает, почему байтовую порцию нельзя автоматически считать целой записью.

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

  1. Первый массив: 2 части длиной 2/3; второй: 3 части длиной 2/2/2.

  2. Средняя байтовая часть |B; все пять сообщений Истина.

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

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

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

  1. Для произвольного UTF-8 порция может содержать только часть символа. Декодирование каждого фрагмента отдельно ненадёжно.

  2. Пример не использует пустые записи и не заявляет их обработку.

  3. Оба результата после Ждать являются массивами РезультатЧтенияДанных, не массивами строк.

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

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

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

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

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