Пропускает при чтении указанное количество байтов в потоке.
Синтаксис
Пропустить(<Количество>)Полное описание, параметры и ограничения
ЧтениеДанных.Пропустить (DataReader.Skip)
ЧтениеДанных (DataReader)
Пропустить (Skip)
Доступен, начиная с версии 8.3.9.
Синтаксис:
Пропустить(<Количество>)
Параметры:
<Количество> (обязательный)
Тип: Число.
Количество байтов, которые требуется пропустить.
Возвращаемое значение:
Тип: Число.
Количество фактически пропущенных данных.
Описание:
Пропускает при чтении указанное количество байтов в потоке.
Доступность:
Тонкий клиент, сервер, толстый клиент, внешнее соединение.
См. также:
ЧтениеДанных, метод НачатьПропуск
ЧтениеДанных, метод ПропуститьАсинх
Использование в версии:
Доступен, начиная с версии 8.3.9.
Описание изменено в версии 8.3.18.
Методическая информация
Практические примеры
Пропустить заголовок и не перепутать успешный индекс 0 с Ложь
В собственном пакете HDR|BODY пропускаем три байта заголовка и односимвольную границу. Метод поиска возвращает 0 при успехе, -1 при отсутствии.
Где и как запускать
Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.
Подготовка
Используйте отдельную учебную базу. Фрагмент без директив вставьте в тело серверной процедуры ВыполнитьПример() Экспорт общего модуля УчебныеЗадачи.
Все исходные байты создаются самим примером в памяти. Файлы, сеть, справочники и документы не нужны.
Запускайте задачи отдельно. После закрытия ЧтениеДанных/ЗаписьДанных не используйте этот экземпляр повторно.
Данные = ПолучитьДвоичныеДанныеИзСтроки("HDR|BODY", КодировкаТекста.UTF8, Ложь);
Чтение = Новый ЧтениеДанных(Данные, КодировкаТекста.UTF8);
Попытка
Сообщить(Чтение.Пропустить(3) = 3);
ИндексМаркера = Чтение.ПропуститьДо("|", КодировкаТекста.UTF8);
Если ИндексМаркера = -1 Тогда
ВызватьИсключение "После заголовка нет разделителя |";
КонецЕсли;
Сообщить(ИндексМаркера = 0);
Сообщить(Чтение.ПрочитатьСимволы() = "BODY");
Сообщить(Чтение.Пропустить(10) = 0);
Сообщить(Чтение.ПропуститьДо("|", КодировкаТекста.UTF8) = -1);
Исключение
Чтение.Закрыть();
ВызватьИсключение;
КонецПопытки;
Чтение.Закрыть();Разбор по шагам
Пропустить считает байты, а не текстовые символы. Здесь HDR — ASCII, поэтому три символа равны трём байтам.
ПропуститьДо с одним маркером возвращает 0 при успехе. Это число не нужно превращать в Булево.
После найденного маркера позиция находится на первом байте BODY; сам разделитель уже пропущен.
После чтения хвоста пропуск десяти байтов фактически пропускает ноль. Всегда смотрим фактическое количество.
Повторный поиск границы после конца возвращает -1, а не исключение успеха.
Как проверить результат
Получен BODY; успешный индекс 0, отсутствующий маркер -1.
Проверки количества пропущенных байтов дают 3 и 0; все пять сравнений Истина.
Ожидаемый результат
Корректно обработаны пропуск фиксированной длины, найденная граница и конец данных.
На что обратить внимание
При неполном фиксированном заголовке следует прекратить разбор, а не продолжать со сдвинутой позиции.
Не используйте ЗначениеЗаполнено(ИндексМаркера) как тест успеха: индекс 0 допустим.
Для UTF-8 пропуск N байтов не гарантирует пропуск N букв.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.