Асинхронная функция. Делит остаток данных на части заданного размера. Размер части задается в байтах.
Синтаксис
РазделитьНаЧастиПоАсинх(<РазмерЧасти>)Полное описание, параметры и ограничения
ЧтениеДанных.РазделитьНаЧастиПоАсинх (DataReader.SplitInPartsOfAsync)
ЧтениеДанных (DataReader)
РазделитьНаЧастиПоАсинх (SplitInPartsOfAsync)
Доступен, начиная с версии 8.3.18.
Синтаксис:
РазделитьНаЧастиПоАсинх(<РазмерЧасти>)
Параметры:
<РазмерЧасти> (обязательный)
Тип: Число.
Размер части данных в байтах.
Возвращаемое значение:
Тип: Обещание.
Результат выполнения обещания - массив значений типа РезультатЧтенияДанных.
Описание:
Асинхронная функция. Делит остаток данных на части заданного размера.
Размер части задается в байтах.
Доступность:
Тонкий клиент, толстый клиент.
См. также:
ЧтениеДанных, метод НачатьРазделениеНаЧастиПо
ЧтениеДанных, метод РазделитьНаЧастиПо
Использование в версии:
Доступен, начиная с версии 8.3.18.
Методическая информация
Практические примеры
Асинхронно разделить текстовые записи и байтовые порции
Сравниваем разделение AA|BBB по границе и разделение того же набора на порции по два байта. Это разные операции с разным смыслом.
Где и как запускать
Модуль пустой управляемой формы учебной внешней обработки; тонкий или толстый клиент Windows. Вставьте весь модуль. Это не серверный код.
Подготовка
Создайте учебную внешнюю обработку с пустой управляемой основной формой. Создайте команду УчебныйПример и кнопку этой команды.
В свойстве команды Действие выберите процедуру УчебныйПример. Вставьте полный приведённый модуль формы.
Откройте EPF в тонком или толстом клиенте Windows и нажмите кнопку. Не переносите Ждать и Асинх в серверный общий модуль.
Пример работает только со своими данными в памяти; записи в базу, файлы и сеть нет.
&НаКлиенте
Асинх Процедура УчебныйПример(Команда)
Данные = ПолучитьДвоичныеДанныеИзСтроки("AA|BBB", КодировкаТекста.UTF8, Ложь);
Чтение = Новый ЧтениеДанных(Данные, КодировкаТекста.UTF8);
Попытка
Записи = Ждать Чтение.РазделитьАсинх("|");
Сообщить(Записи.Количество() = 2);
Сообщить(Записи[0].Размер = 2 И Записи[1].Размер = 3);
Ждать Чтение.ЗакрытьАсинх();
Исключение
Чтение.Закрыть();
ВызватьИсключение;
КонецПопытки;
Чтение = Новый ЧтениеДанных(Данные);
Попытка
Порции = Ждать Чтение.РазделитьНаЧастиПоАсинх(2);
Сообщить(Порции.Количество() = 3);
Сообщить(Порции[0].Размер = 2 И Порции[1].Размер = 2 И Порции[2].Размер = 2);
Середина = Ждать Порции[1].ПолучитьДвоичныеДанныеАсинх();
Сообщить(ПолучитьСтрокуИзДвоичныхДанных(Середина, КодировкаТекста.UTF8) = "|B");
Ждать Чтение.ЗакрытьАсинх();
Исключение
Чтение.Закрыть();
ВызватьИсключение;
КонецПопытки;
КонецПроцедурыРазбор по шагам
Шесть исходных байтов содержат текстовые записи AA и BBB, разделённые |.
РазделитьАсинх по | возвращает две части без границы: длины 2 и 3.
Для второго опыта создаём новое ЧтениеДанных с начала исходных данных, не используем уже исчерпанный экземпляр.
РазделитьНаЧастиПоАсинх(2) возвращает три двухбайтовые порции AA, |B, BB. Он не считает | разделителем.
Проверка среднего фрагмента |B показывает, почему байтовую порцию нельзя автоматически считать целой записью.
Как проверить результат
Первый массив: 2 части длиной 2/3; второй: 3 части длиной 2/2/2.
Средняя байтовая часть |B; все пять сообщений Истина.
Ожидаемый результат
На одном наборе продемонстрировано различие семантической границы и фиксированного размера.
На что обратить внимание
Для произвольного UTF-8 порция может содержать только часть символа. Декодирование каждого фрагмента отдельно ненадёжно.
Пример не использует пустые записи и не заявляет их обработку.
Оба результата после Ждать являются массивами РезультатЧтенияДанных, не массивами строк.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.