Ostrzeżenie z góry: istnieje wiele różnych sposobów osiągnięcia tego w Rebol. Więc prawdopodobnie dostaniesz kilka różnych sugestii.
Na początek trzymajmy się oryginalnego podejścia do korzystania z funkcji ZNAJDŹ.
W przypadku korzystania z funkcji ZNAJDŹ z serią uzyskuje się nowy widok na podstawowe dane serii, które znajdują się w innym przesunięciu względem początku danych serii.
Zacznijmy jakiś przykład danych:
>> line: copy "this is foo#and here comes a long bar"
== "this is foo#and here comes a long bar"
Przekonajmy charakter #
w tej linii, oraz zapoznać się z wyniku, jak POS:
>> pos: find line "#"
== "#and here comes a long bar"
Jak widać, to w zasadzie już daje ci drugą część (to, co nazwałeś REST2) twojego podziału. Musisz tylko pominąć samego ogranicznika (i skopiuj wynikowy ciąg, aby niezależnie od pierwotnej linii String):
>> rest: copy next pos
== "and here comes a long bar"
do wydobywania początkową część, można użyć miłą cechę COPY/part. Dokumentacja udoskonalenia "/ część" (spróbuj help copy
) mówi: "Granice do danej długości lub pozycja" (podkreślenie moje). Mamy już taką pozycję jako POS. A więc:
>> ref: copy/part line pos
== "this is foo"
I gotowe! Kompletny kod:
pos: find line "#"
ref: copy/part line pos
rest: copy next pos
Dla porównania, tutaj jest podejście oparte PARSE:
parse line [copy ref to "#" skip copy rest to end]
dam to stanowisko bez dalszych wyjaśnień. Jeśli chcesz dowiedzieć się więcej o PARSE, dobrym miejscem do rozpoczęcia jest czcigodny "Parsing" chapter in the REBOL/Core Users Guide (pierwotnie napisany dla REBOL 2.3, ale podstawy są nadal w większości takie same w obecnych wersjach REBOL 2 i 3).
Jedna uwaga pomocnicza na końcu: zamiast pojedynczego łańcucha znaków "#"
można również użyć znaku, który jest zapisany jako #"#"
w Rebol.
Bardzo ładne i podoba mi się podejście parse. Dzięki. –
Jeśli wyszukiwany znak jest unikatowy w ciągu liniowym, możesz użyć krótszej formy do podziału ciągu i przypisania dwóch części w jednym wyrażeniu: 'set [ref rest2] parsowanie wiersza" # "' – DocKimbel