Free Trial

Blog - Deutsch

Erkenntnisse und Ideen von den besten Analytics-Experten.
RolandSchubert
16 - Nebula
16 - Nebula

Manchmal muss man einfach das letzte Wort haben - das letzte Wort aus einem Textfeld natürlich. 

 

Wenn es darum geht, Textfelder zu "zerlegen", gibt es eine ganze Reihe von Möglichkeiten.  Wird zum Beispiel nur das erste Wort in einem Textfeld benötigt, musst Du eigentlich nur die erste Leerstelle finden (mit FindString) - den Rest erledigt dann die Funktion Left, die die angegebene Anzahl von Zeichen vom Anfang eines Strings zurückgibt (in diesem Fall, alle vor dem ersten Leerzeichen - also das erste Wort).

 

Das kann dann zum Beispiel so aussehen:

 

 

 

LEFT([Name], FINDSTRING([Name], ' '))

 

 

 

Aber wenn es nun um das letzte Wort geht? Vielleicht um den Nachnamen, der als letztes Wort in einem Namensfeld steht? Klar, es gibt eine RIGHT Funktion, die die angegebene Zahl von Zeichen am Ende eines Textfelds liefert. Aber leider gibt es beim FINDSTRING keinen Paramter, mit dem man die Suche nach einem Zeichen am Ende eines Strings beginnen könnte.

 

Also, was nun? Wie fast immer gibt es eine Reihe von Möglichkeiten.

 

 

Variante 1: "Komplettzerlegung"

 

Zunächst einmal kann man natürlich den Text komplett in einzelne Worte zerlegen und dann letzte Wort finden. Ich zeige das mal am Beispiel einer Namensliste.

 

Zunächst (1) bekommt jeder Eintrag eine ID, da hilft das Record ID Tool. 

 

Das ist notwendig, weil das Text To Columns Tool (2) nicht eine zusätzliche Spalte mit dem Ergebnis erzeugt, sondern einfach das Originalfeld verwendet - jedenfalls, wenn "Split To Rows" eingestellt wird. Das ist hier notwendig, da wir ja nicht wissen, wie viele Bestandteile (= Worte) das Feld enthält. Das Trennzeichen ist hier ein Leerzeichen, das zwar als Delimiter eingegeben werden kann,  dann aber vielleicht etwas irritiert, weil kein sichtbares Trennzeichen vorhanden ist. Stattdessen kann auch "\s" eingegeben werden, das ist vielleicht etwas einfacher nachzuvollziehen.

Jetzt entsteht je Wort ein eigene Zeile; über die ID kann ja die "Ursprungszeile" identifiziert werden. Das Summarize Tool hilft schließlich, die letzte Zeile für jede ID zu finden und damit das jeweils letzte Wort.

 

P01.png

 

Variante 2: Suche vom Ende

 

Ziemlich viel Aufwand, das muss doch auch einfacher gehen, oder? Geht es natürlich. Zwar hat die FindString Funktion keine Möglichkeit, einfach mit der Suche am Ende des Strings anzufangen, aber wir können den String ja einfach umkehren. ReverseString macht genau das. Und dann können wir wieder FindString einsetzen, das liefert uns für den umgekehrten String die Anzahl Zeichen bis zur ersten Leerstelle (also für den Originalstring die Anzahl Zeichen nach der letzten Leerstelle). 

 

Dabei sollte man in Erinnerung behalten, dass der Zähler für die Position eines Zeichens immer mit Null beginnt - für unsere Zwecke passt das sehr gut, das erste Leerzeichens ist das fünfte Zeichen im umgekehrten String (also Position 4). Für die Funktionen Left und Right brauchen wir die Anzahl Zeichen - genau die hat uns FindString ja geliefert. 

 

P02.png 

 

Der Rest ist dann wieder einfach - mit RIGHT schneiden wir einfach die entsprechende Anzahl Stellen am Ende des Strings aus.

 

 

 

RIGHT([Name], FINDSTRING(ReverseString([Name]), ' '))

 

 

 

Ungünstig ist nur, wenn wir nicht das letzte, sondern auch noch das vorletzte oder irgendein anderes Wort benötigen. Klar, man kann den Originalstring natürlich um den entsprechenden Teil kürzen, aber es wird dann echt umständlich.

 

Ich kann das beurteilen, sowas habe ich in einem Fall tatsächlich mal gemacht. Aber da kannte ich die dritte Variante noch nicht.

 

 

Variante 3: Die freie Auswahl

 

Bei meinem dritten Ansatz helfen zwei Funktionen, die vielleicht nicht so häufig benutzt werden. GetWord und CountWords. GetWords liefert genau ein Wort aus einem String, dazu muss man nur den Ausgangsstring und dessen Position angeben. Wenn man also das erste Wort haben möchte, ist das Position ... richtig "0"!

 

 

 

GetWord([Name], 0)

 

 

 

Beim letzten Wort gibt es dann etwas mehr zu tun - ein "last" gibt es nicht, es muss schon eine Position sein. Dazu müssen wir dann wissen, wieviel Wort der String hat - und das liefert CountWords. Und diese Anzahl können wir dann wieder in GetWord einsetzen, natürlich ertst, nachdem wir (wegen der Null-basierten Position) noch 1 subtrahiert haben:

 

 

 

GetWord([Name], CountWords([Name]) - 1)

 

 

 

Damit kann man jetzt problemlos auch weitere Worte aus dem Originalstring herausziehen.

 

 

Auf die beiden Funktionen bin ich irgendwann mehr oder weniger zufällig gestossen und mein ersten Gedanke war: "Hätte ich das mal früher entdeckt."  Generell hilft bei der Suche nach einer Lösung oft, einfach mal nach einer passenden Funktion, die genau das benötigte Ergebnis liefert - man wird gar nicht mal so selten fündig!  

 

 

 

Weitere Tipps Tuesday Beiträge

 

Dieser Eintrag ist Teil der Tipps Tuesday-Serie, alle Einträge dieser Serie findest du in unserem Index aufgelistet.

Beschriftungen