простой ответ: нет, мы не можем ...
Способ синтаксического анализа работает, возможно, потребуется откат к предыдущей части строки ввода, которая может фактически быть заголовком полного ввода, когда он встречает последний символ потока.
порты копируют свои данные в строковый буфер по мере того, как они получают входные данные от порта, так что на самом деле никогда не существует «предыдущей» строки для анализа, которую можно откатить. это как квантовая физика ... просто смотреть на это, его больше нет.
Но, как вы знаете, в реболе ... нет, это не ответ. ; -)
При этом существует способ проанализировать данные из порта по мере его захвата, но это немного больше работы.
вы используете буфер и
APPEND buffer COPY/part connection amount
В зависимости от ваших данных, объем может быть 1 байт или 1 КБ, используйте то, что имеет смысл.
Когда новый вход добавлен в ваш буфер, проанализируйте его и добавьте логику, чтобы узнать, соответствует ли часть этого буфера.
Если что-то совпадало положительно, вы удаляете / разделяете то, что совпало из буфера, и продолжаете анализ, пока ничего не анализируется.
затем повторяйте выше, пока не дойдете до конца ввода.
Я использовал это на tcp-сервере EDI в реальном времени, который имеет tcp-порт «всегда включен» для того, чтобы разбить (потенциально) непрерывный поток входных данных, который на самом деле представляет собой сквозные сообщения.
подробности
Лучший способ настроить эту систему - использовать / no-wait и цикл до закрытия порта (вы не получите ничего вместо "").
Также убедитесь, что у вас есть способ проверки на проблемы целостности данных (например, пропущенный байт или ошибочное сообщение) при разборе, в противном случае вы никогда не достигнете конца.
В моей системе, когда размер буфера превышал определенный размер, я пробовал альтернативное правило, которое пропускало байты, пока шаблон не мог бы быть найден дальше по потоку. Если он обнаружен, регистрируется ошибка, сохраняется частичное сообщение и выдается предупреждение для sysadmin, чтобы разобраться в сообщении.
HTH!