Предупреждение спереди: есть много разных способов достижения этого в Реболе. Поэтому вы, вероятно, получите несколько разных предложений.
Для начала давайте придерживаться вашего первоначального подхода к использованию FIND.
Когда вы используете FIND с серией, то, что вы получаете, представляет собой новый вид на данные базовой серии, расположенные на другом смещении от начала данных серии.
Давайте начнем с некоторым примером данными:
>> line: copy "this is foo#and here comes a long bar"
== "this is foo#and here comes a long bar"
Найдёх #
характера в этой строке, и относится к результату, как POS:
>> pos: find line "#"
== "#and here comes a long bar"
Как вы можете видеть, это в основном уже дает вам вторую часть (то, что вы назвали REST2) вашего раскола. Вы только должны пропустить мимо самого разделителя (а затем скопировать полученную строку, чтобы сделать его независимым от исходной строки ЛИНИИ):
>> rest: copy next pos
== "and here comes a long bar"
Для извлечения начальной части, вы можете использовать хороший признак COPY/часть. Документация «/ part» уточнения (попробуйте help copy
) говорит: «Пределы до заданной длины или позиция» (акцент мой). У нас уже есть эта позиция, удобная как POS. Таким образом:
>> ref: copy/part line pos
== "this is foo"
И вот вы! Полный код:
pos: find line "#"
ref: copy/part line pos
rest: copy next pos
Для справки, вот PARSE подход, основанный на:
parse line [copy ref to "#" skip copy rest to end]
Я дам эту позицию без дальнейших объяснений. Если вы хотите узнать больше о PARSE, хорошим местом для начала является почтенный "Parsing" chapter in the REBOL/Core Users Guide (первоначально написанный для REBOL 2.3, но основы по-прежнему в основном идентичны в текущих версиях REBOL 2 и 3).
Один подсобного примечание в конце: вместо строки одного элемента "#"
вы также можете использовать символ, который записывается в виде #"#"
в Rebol.
Очень хороший, и мне нравится подход синтаксического анализа. Благодарю. –
Если ваш искомый символ уникален в строке строки, вы можете использовать более короткую форму для разделения строки и назначения двух частей в одном выражении: 'set [ref rest2] parse line" # "' – DocKimbel