Free Trial

Forum - Deutsch

Suchen Sie nach Antworten, stellen Sie Fragen und teilen Sie Ihr Alteryx-Wissen.
GELÖST

Löschen führender Buchstaben in einer Spalte mit Zahlen/Buchstabencodes

IBe
Meteor

Hallo, 

hoffentlich könnt Ihr mir helfen :-) : 

In einer Spalte einer Inputdatei befinden sich Produktnummern, die aus einer relativ willkürlichen Zahlen-Buchstabenkombination bestehen deren Länge variabel ist. 

Es geht nun darum, zu erkennen, ob die jeweils 1. Stelle eines solchen Datenfeldes ein Buchstabe oder eine Ziffer ist und für den Fall, dass es ein Buchstabe ist, diesen zu löschen. Alle weiteren gegebenenfalls an anderer Stelle vorhandenen Buchstaben sollen bestehen bleiben. 

 

Gibt es eine Möglichkeit, dies mit dem Formeltool oder anderswie in Alteryx abzubilden und wenn ja, wie? 

Hier ein Beispiel zur Veranschaulichung; der rote Buchstabe soll weg...  

IBe_0-1658924971880.png

 

Ich danke Euch schon mal sehr für Eure Ideen :-) !! 

Viele Grüße, Inken 

9 ANTWORTEN 9
RolandSchubert
16 - Nebula
16 - Nebula

Hallo @IBe ,

 

es gibt bestimmt eine ganze Reihe von Möglichkeiten, ich würde die folgende Variante nutzen (mit [Field1] als Feld mit den Produktnummern):

 

SubString([Field1], STRCSPN([Field1],'0123456789'))

 

Die Funktion STRCSPN findet am Anfang von [Field1] die Anzahl Zeichen, die nicht im zweiten Parameter angegeben sind (also hier alle, die nicht numerisch sind). Mit SubString nehme ich dann nur den Teil des Feldes nach diesen Zeichen. Damit werden alle "Nicht-Ziffern" am Anfang entfernt, im Rest des Feldes bleiben sie erhalten. 

 

Viele Grüße

 

Roland 

IBe
Meteor

Hallo @RolandSchubert,

 

Danke Roland, das würde m.E. funktionieren, aber was ist wenn es ZWEI führende Buchstaben sind? Es soll jedoch nur der gelöscht werden, der an 1. Stelle steht. (dafür gab es kein Beispiel in meiner Liste oben, aber den Fall gibt es leider auch) . 

 

Ich würde mich daher über eine noch variablere Lösung sehr freuen. 

Herzliche Grüße! Inken

RolandSchubert
16 - Nebula
16 - Nebula

Klar, auch das bekommen wir hin.

 

SubString([Field1], MIN(STRCSPN([Field1],'0123456789'), 1))

 

Ich habe noch ein MIN eingefügt - wenn das erste Zeichen eine Ziffer ist, liefert STRCSPN 0 als Ergebnis, dann ergibt auch MIN 0 und der gesamte String wird übernommen, bei einem Buchstaben wird es die 1, bei mehr als einem Buchstaben ist auch 1 die Grenze. Jetzt wird wirklich nur der erste Buchstabe entfernt.

 

 

IBe
Meteor

Großartig! Vielen Dank!! -- Ich kann es leider erst morgen ausprobieren, bin aber sehr zuversichtlich :-) 

Gibt es eigentlich irgendwo zufällig eine Übersicht zum Formelaufbau; also welche Befehle es gibt, wofür man sie verwenden kann und wie die Syntax zu sein hat? Ich bin komplett neu bei Alteryx, verstehe zwar den Aufbau der Workflows als solches, komme mit dem Formeltool aber leider noch gar nicht klar. 

VG, Inken

RolandSchubert
16 - Nebula
16 - Nebula

Ich denke, es sollte funktionieren, wenn es noch Fragen gibt, melde Dich einfach.

 

Eine Übersicht zu den Funktionen gibt es in der Dokumentation, da findest Du zu jeder Funktion eine mehr oder weniger ausführliche Beschreibung: Funktionen | Alteryx Help

 

Ansonsten gibt es in der Academy einige Videos, in denen es auch um die Anwendung von Funktionen geht: Interactive Lessons - Alteryx Community

 

Viele Grüße

 

Roland

 

 

grossal
15 - Aurora
15 - Aurora

Hallo @IBe,

 

Willkommen in der deutschen Alteryx-Community! Neben der bereits genannten Lösung von Roland gibt es noch einige andere und ich würde zumindest vier davon einmal zeigen wollen :-)

 

1) Beginner freundlich

 

IF Contains('0123456789',Left([Text], 1))
then [Text]
else Right([Text], Length([Text])-1)
endif

 

Wir prüfen schlichtweg ob unser ganz linkes Zeichen (Left([Text],1) in der Zeichenkette 0123456789 vorkommt. Ist dies der Fall, dann lassen wir den Text so wie er ist, da dieser mit einer Zahl anfängt. Ist dies nicht der Fall, so fängt er mit einem Buchstaben an und wir können das Startzeichen abschneiden. Dies wird hier in bester Excel-Manier mit right und der Text-Länge -1 gemacht. Dadurch schneiden wir genau das erste Zeichen ab.

 

2) Ein bisschen Regex :-)

IF REGEX_Match([Text], '[a-zA-Z].*')
then Right([Text], Length([Text])-1)
else [Text]
endif

 

Mit REGEX_Match können wir etwas schöner prüfen ob ein Text ein Schema erfüllt, in unserem Fall testen wir ob das erste Zeichen (durch eckige Klammern äußern wir, dass wir bestimmte Zeichen prüfen wollen) ein Buchstabe ist. Ist dies der Fall, dann nehmen wir die gleiche Variante wie zuvor um den Text abzuschneiden.

 

3) Ein bisschen mehr Regex

IF REGEX_Match([Text], '[a-zA-Z].*')
then REGEX_Replace([Text], '.(.*)', '$1')
else [Text]
endif

 

Ich persönlich würde wohl Variante 3 nehmen, da ich vor einiger Zeit in den Regex-Brunnen gefallen bin. Der Regex-Match-Teil bleibt der gleiche, nur nutzen wir diesmal statt dem Excel-Trick ein Regex-Replace um den Text zu extrahieren. Nachdem wir bereits geprüft haben, dass das erste Zeichen ein Text ist, können wir nun mit dem Punkt vor der Klammern genau dieses markieren. Mit den Klammern spezifizieren wir den restlichen Teil und fügen diesen mit $1 wieder ein.

 

4) Regex-Mastery

Ich hatte ja bereits erwähnt, dass ich statt dem Jungbrunnen in den Regex-Brunnen gefallen bin ... dies kommt besonders bei folgendem zur Geltung:

REGEX_Replace([Text], '^[a-zA-Z](.*)', '$1')

 

Warum funktioniert das? Da wir im Pattern des Regex-Replace spezifizieren, dass es mit einem Buchstaben beginnen soll, matched es auch nur die Texte bei denen es mit einem Buchstaben beginnen - alle anderen bleiben unverändert. Der Rest ist quasi das gleiche Spiel wie zuvor.

 

Im Ergebnis kommt bei allen das gleiche raus: 

 

grossal_0-1658929634383.png

 

 

 

Viele Grüße

Alex

IBe
Meteor

Wow, Ihr seid der Wahnsinn! Vielen Dank für die Tipps!! 

Ich werde sicherlich demnächst mit einem anderen Problem wiederkommen 😀😆... 

Bis dahin! Viele Grüße.

grossal
15 - Aurora
15 - Aurora

Das freut uns doch sehr zu hören!

 

Magst du Rolands und meine Antwort noch als Lösung markieren? Dadurch können Leute die nach ähnlichen Problemen suchen schneller zu einer Lösung finden :-)

 

 

Viele Grüße & eine schöne Woche :-)

IBe
Meteor

Klaro, gerne. Schon erledigt. VG! 

Beschriftungen