Zeichenstring abschneiden ab ´%3%'

Hallo zusammen

ich habe die Lösung hier nicht gefunden, sorry, falls es doppelt wäre.

In einem Feld ist ein sehr langer Text, den die Benutzer unterteilen in

Abschnitt1**%3%**

Abschnitt2Zeile1

Abschnitt2Zeile2**%4%**

Abschnitt3

Ich muss nun die verschiedenen Abschnitte in verschiedene Felder drucken lassen, also ich brauche:

  1. den Inhalt des Textfeldes von Links und muss diesen abschneiden bei ’%3%’
  2. den Inhalt des Textfeldes zwischen ’%3%’ und ’%4%’
  3. den Inhalt nach ‘%4%’ nehmen.

ich kenne nur TextWidth (Gibt die Breite des Texts mit dem entsprechenden Font zurück) oder Left$() (Kürzt eine Zeichenkette rechts oder Right$() (Kürzt eine Zeichenkette links.

Leider ist mein Text nicht fix mit Zeichenkette sondern variabel, darum diese %3% - Lösung.

Danke für eure Hilfe

Hallo Sonja,

in etwa so:

left$(Textfeld, strPos(Textfeld, “%3%”)-1)
mid$(Textfeld,strpos(Textfeld, “%3%”)+2, strpos(Textfeld, “%4%”)-1)
Right$(Textfeld, len(Textfeld) - strPos(Textfeld, “%4%”)-2)

die -1, +2, -2 , die von strPos abgezogen bzw. addiert werden, müssen ggf. etwas angepasst werden.

Hallo Sonja,

den Vorschlag vom @Simon_Rosner können wir so unterstreichen. Das wäre nämlich auch unser Ansatz gewesen und sollte die gewünschte Umsetzung ermöglichen.

Mit freundlichen Grüßen
Leon

Hey danke für die Hilfe
also 1. und 3 stimmen soweit aber für
2. = mid$(Textfeld,strpos(Textfeld, ‘%3%’)+2, strpos(Textfeld, ‘%4%’)-x)
stimmt es nicht ganz, … ich muss mit dem hinteren -x alles nach dem ‘%4%’ “wegschneiden” und damit ist es nicht mehr variabel …
ich finde den Fehler nicht

Die Formel mit Mid$(…) soll ja zwei Zeichen nach dem “%3%” und wie von Simon bspw. beschrieben ein Zeichen vor dem “%4%” den entsprechenden Text dazwischen ausgeben.

Das entspricht deiner ursprünglichen Frage aus 2. oder verstehe ich deine neue Frage falsch / die Formel funktioniert nicht ganz richtig? Es wird ja erst “abgeschnitten”, wenn “%4%” zutreffend ist und sollte somit entsprechend variabel in der Länge sein.

Ggf. hilft sonst eine Formel ähnlich zuMid$(Textfeld,StrPos(Textfeld, “%3%”) + Len(“%3%”),StrPos(Textfeld, “%4%”) -(StrPos(Textfeld, “%3%”) + Len(“%3%”)))weiter?

Wie wäre es mit der Token$ Funktion?

Token$(“abc%3%def”,0,”%3%) → “abc”
Token$(“abc%3%def”,1,”%3%) → “def”

Das hat mir dann doch keine Ruhe gelassen :grinning_face:

Mein Test:
Benutzervariable: Textfeld = “Abschnitt1%3%Abschnitt2%4%Abschnitt3”
Textfeld mit drei Absätzen für die drei Abschnitte zum Anzeigen:
Absatz1: Token$(@Textfeld,0,“%3%”)
Absatz2: Token$(Token$(@Textfeld,1,“%3%”),0,“%4%”)
Absatz3: Token$(Token$(@Textfeld,1,“%3%”),1,“%4%”)

Fertig! Ich hoffe, es war so gemeint.

genau die Formel funktionierte nicht ganz richtig. Ich probiere nachher deinen 2. Vorschlag. Danke

Danke Ich probiere nachher den Vorschlag

Hallo,

mir hat es auch keine Ruhe gelassen. :slight_smile:

Meine Lösung funktioniert, wenn man den 2. Parameter von mid$ richtigerweise als Länge und nicht als Endposition interpretiert. Es müsste also so aussehen:

Absatz1: left$(@Textfeld, strPos(@Textfeld, “%3%”))

Absatz2: mid$(@Textfeld,strpos(@Textfeld, “%3%”)+3, strpos(@Textfeld, “%4%”)-strpos(@Textfeld, “%3%”)-3)

Absatz 3: Right$(@Textfeld, len(@Textfeld) - strPos(@Textfeld, “%4%”)-3)

Ich muss aber zugeben, die Lösung von Thomas ist bei Weitem eleganter.

Viele Grüße und einen schönen Tag!

Hey nochmals danke an alle. es funktioniert beides super ! @Leon_Struwe @Thomas_Wurl
Token ist natürlich sehr schick und auch etwas übersichtlicher :smiley: