Eine Warnung vorne: Es gibt viele verschiedene Möglichkeiten, dies in Rebol zu erreichen. Du wirst also wahrscheinlich ein paar verschiedene Vorschläge bekommen.
Für einen Anfang bleiben wir bei Ihrem ursprünglichen Ansatz der Verwendung von FIND.
Wenn Sie FIND mit einer Serie verwenden, erhalten Sie eine neue Ansicht auf die zugrunde liegenden Seriendaten, die an einem anderen Versatz vom Anfang der Seriendaten positioniert sind.
Lassen Sie uns mit einigen Beispieldaten starten:
>> line: copy "this is foo#and here comes a long bar"
== "this is foo#and here comes a long bar"
ist die #
Zeichen innerhalb dieser Linie finden lassen, und auf das Ergebnis als POS beziehen:
>> pos: find line "#"
== "#and here comes a long bar"
Wie Sie sehen können, im Grunde diese bereits gibt Ihnen den zweiten Teil (was Sie REST2 genannt haben) Ihres Split. Sie werden nur über die Trennzeichen zu überspringen haben sich (und dann den resultierenden String kopieren, um sie von der ursprünglichen Linie String unabhängig zu machen):
>> rest: copy next pos
== "and here comes a long bar"
Für den Anfangsteil zu extrahieren, können Sie ein nettes Feature verwenden Kopie/Teil. Die Dokumentation der Verfeinerung "/ part" (try help copy
) sagt: "Grenzen zu einer gegebenen Länge oder Position" (Hervorhebung meins). Wir haben diese Position bereits als POS zur Hand. Also:
>> ref: copy/part line pos
== "this is foo"
Und los gehts! Der vollständige Code:
pos: find line "#"
ref: copy/part line pos
rest: copy next pos
Als Referenz ist hier ein PARSE-basierter Ansatz:
parse line [copy ref to "#" skip copy rest to end]
Ich werde diesen Stand ohne weitere Erklärung lassen. Wenn Sie mehr über PARSE wissen wollen, ist ein guter Ausgangspunkt der ehrwürdige "Parsing" chapter in the REBOL/Core Users Guide (ursprünglich für REBOL 2.3 geschrieben, aber die Grundlagen sind in den aktuellen REBOL 2 und 3 Versionen immer noch die gleichen).
Eine ergänzende Notiz am Ende: Anstelle einer Einzelzeichenfolge "#"
könnten Sie auch ein Zeichen verwenden, das in Rebol als #"#"
geschrieben wird.
Sehr schön und Ich mag die Parse-Ansatz. Vielen Dank. –
Wenn das gesuchte Zeichen in der Zeilenfolge eindeutig ist, können Sie eine kürzere Form verwenden, um die Zeichenfolge aufzuteilen und die beiden Teile in einem Ausdruck zuzuordnen: 'set [ref rest2] Syntaxanalysezeile" # "' – DocKimbel