Moin zusammen.
Ich habe einen sehr langen String aus Buchstaben und ZIffern.
Nun möchte ich diesen Spring teilen. Immer 6 Buchstaben/Ziffern und dann ein "|".
Die Länge ist flexibel, immer jedoch durch 6 teilbar.
$_eingang = "ab5sfd6389ewuifhefz9f8z49r3reijouw844t04ut5zu4zz4ß49tu"
So soll die Ausgabe aussehen :
$_ausgabe ="ab5sfd|6389ew|uifhef|z9f8z4|9r3rei|jouw84|4t04ut|5zu4zz|4ß49tu"
Habe mal die SuFu und die Hilfe durchgesehen, aber nichts gefunden, wenn man einen String ohne Trennzeichen teilen möchte.
stringsplitt ohne Trennzeichen
-
Alina -
28. Mai 2022 um 23:04 -
Erledigt
-
-
-
AspirinJunkie
Du bist mein Held des Abends. D A N K EDie Originallänge der Strings sind jeweils ca. 4800 - 7500 Buchstaben/Zahlen.
Getestet und läuft einwandfrei ! ! ! -
Für das berufliche Problem war das die geniale Lösung.
Jetzt hatte ich gedacht, das ich das auch für eine anderen Script nutzen kann, aber da möchte er nicht so wie ich es möchte. Aber das liegt bestimmt an mir.
Das mag er nicht: $input2 = StringRegExpReplace($input2, "\w{6}\K", "|") WARUM NICHT ?!? -
Das mag er nicht: $input2 = StringRegExpReplace($input2, "\w{6}\K", "|") WARUM NICHT ?!?
Sollte aber funktionieren.
AutoItLocal $Input2 = "ab5sfd6389ewuifhefz9f8z49r3reijouw844t04ut5zu4zz4ß49tu" ConsoleWrite("Vorher : " & $Input2 & @CRLF) ConsoleWrite("VarType : " & VarGetType($Input2) & @CRLF) $Input2 = StringRegExpReplace($Input2, "\w{6}\K", "|") ConsoleWrite("Nachher : " & $Input2 & @CRLF)
Ausgabe in SciTE :
Vorher : ab5sfd6389ewuifhefz9f8z49r3reijouw844t04ut5zu4zz4ß49tu
VarType : String
Nachher : ab5sfd|6389ew|uifhef|z9f8z4|9r3rei|jouw84|4t04ut|5zu4zz|4ß49tu
Ist $Input2 denn mit einem String besetzt ?
-
Ist $Input2 denn mit einem String besetzt ?
DANKE !
Ja, das Script macht jetzt das einsetzen des Trennzeichen.
Muss jetzt weiter sehen. Nun habe ich das nächste Problem. -
DANKE ! Ja, das Script macht jetzt das Einsetzen des Trennzeichen.
Hi Alina !
Ich möchte mich korrigieren .
Es liegt nicht daran, dass der Variablen $Input zwingend ein String zugewiesen werden muss - z.B. wäre eine Fließkommazahl auch möglich.
Das Problem liegt an \w im Suchmuster (Pattern).
Auszug aus der Hilfe :
\w = findet alle Wörterzeichen: a-z, A-Z ,0-9 oder Unterstrich (_)
Sobald ein ., aber auch andere Zeichen wie z.B. :, ;, * in $Input vorkommen, erfolgt das Einsetzen des Trennzeichen nicht mehr wie gewünscht.
Ich habe als Suchmuster mal ".{6}\K" angegeben. Damit scheint es korrekt zu funktionieren.
Ein Quick&Dirty Skript zur Anschauung :
AutoIt
Alles anzeigenLocal $Input, $sPattern ConsoleWrite(">=========================================== " & @CRLF) $sPattern = "\w{6}\K" ; Pattern "\w{6}\K" , $Input = String : $Input = "12345678.1234567" ConsoleWrite("Pattern : " & '"' & $sPattern & '"' & @CRLF) ConsoleWrite("Eingang : " & $Input & @CRLF) ConsoleWrite("VarType : " & VarGetType($Input) & @CRLF) $Input = StringRegExpReplace($Input, $sPattern, "|") ConsoleWrite("Ergebnis : " & $Input & @CRLF & @CRLF) ; Pattern "\w{6}\K" , $Input = Fließkommazahl : $Input = 12345678.1234567 ConsoleWrite("Pattern : " & '"' & $sPattern & '"' & @CRLF) ConsoleWrite("Eingang : " & $Input & @CRLF) ConsoleWrite("VarType : " & VarGetType($Input) & @CRLF) $Input = StringRegExpReplace($Input, $sPattern, "|") ConsoleWrite("Ergebnis : " & $Input & @CRLF) ConsoleWrite(">=========================================== " & @CRLF) $sPattern = ".{6}\K" ; Pattern ".{6}\K" , $Input = String : $Input = "12345678.1234567" ConsoleWrite("Pattern : " & '"' & $sPattern & '"' & @CRLF) ConsoleWrite("Eingang : " & $Input & @CRLF) ConsoleWrite("VarType : " & VarGetType($Input) & @CRLF) $Input = StringRegExpReplace($Input, $sPattern, "|") ConsoleWrite("Ergebnis : " & $Input & @CRLF & @CRLF) ; Pattern ".{6}\K" , $Input = Fließkommazahl : $Input = 12345678.1234567 ConsoleWrite("Pattern : " & '"' & $sPattern & '"' & @CRLF) ConsoleWrite("Eingang : " & $Input & @CRLF) ConsoleWrite("VarType : " & VarGetType($Input) & @CRLF) $Input = StringRegExpReplace($Input, $sPattern, "|") ConsoleWrite("Ergebnis : " & $Input & @CRLF) ConsoleWrite(">=========================================== " & @CRLF)
-
Hi Alina !
Ich möchte mich korrigieren .
Es liegt nicht daran, dass der Variablen $Input zwingend ein String zugewiesen werden muss - z.B. wäre eine Fließkommazahl auch möglich.
Im $Input stehen in diesem meinem Fall IMMER nur eine Zahl mit x-Ziffern.
Deine Lösung aus #5 arbeitet doch einwandffrei.
So erfüllt es das setzen des Trennzeichen:
CodeConsoleWrite("Vorher : " & GUICtrlRead($Input1) & @CRLF) ConsoleWrite("VarType : " & VarGetType(GUICtrlRead($Input1)) & @CRLF) GUICtrlSetData($Input2,StringRegExpReplace(GUICtrlRead($Input1), "\w{6}\K", "|")) ConsoleWrite("Nachher : " & GUICtrlRead($Input2) & @CRLF)
Ergebnisse:
Vorher : 438655649666665441652674514514450450
VarType : String
Nachher : 438655|649666|665441|652674|514514|450450|
Und wie geschrieben, das Problem ist nun noch an anderer Stelle. Diese Stelle muss ich nun finden und beheben.Streiche ich die ersten 4 Zeilen wieder, arbeitet es einwandfrei. Nur dann kann ich nicht eine lange Zahl einsetzen
So sieht der Button 2 nun aus.
Code
Alles anzeigenCase $Button2 ; eingefügt ConsoleWrite("Vorher : " & GUICtrlRead($Input1) & @CRLF) ConsoleWrite("VarType : " & VarGetType(GUICtrlRead($Input1)) & @CRLF) GUICtrlSetData($Input2,StringRegExpReplace(GUICtrlRead($Input1), "\w{6}\K", "|")) ConsoleWrite("Nachher : " & GUICtrlRead($Input2) & @CRLF) ; eingefügt ENDE $_extra = GUICtrlRead($Input3) $sInput = GUICtrlRead($Input1) If (StringLen($sInput) < $MinCodeLen) OR (StringLen($sInput) = 1) Then MsgBox(16, "Fehler!", "Die Eingabe muss mindestens " & $MinCharLen & " Codes enthalten!") GUICtrlSetState($Input1, $GUI_FOCUS) ContinueLoop EndIf $sDecoded = Alina_Decode($sInput) If ($sDecoded <> '') Then GUICtrlSetData($Input2, $sDecoded)
Ich mache mich mal weiter auf die Suche. -
Deine Lösung aus #5 arbeitet doch einwandfrei.
Ja, das Pattern "\w{6}\K" von AspirinJunkie arbeitet tadellos, gemäß deiner Anforderung :
$_eingang = "ab5sfd6389ewuifhefz9f8z49r3reijouw844t04ut5zu4zz4ß49tu"
So soll die Ausgabe aussehen :
$_ausgabe ="ab5sfd|6389ew|uifhef|z9f8z4|9r3rei|jouw84|4t04ut|5zu4zz|4ß49tu"Solange man also keine Zeichen außerhalb der durch :
\w = findet alle Wörterzeichen: a-z, A-Z ,0-9 oder Unterstrich (_)
festgelegten Menge verwendet, ist alles ok. Das ist bei Dir ja offenbar so, siehe :
Im $Input stehen in diesem meinem Fall IMMER nur eine Zahl mit x-Ziffern.
Ich wollte nur ergänzen, dass bei Zeichen, die nicht von \w gefunden werden, die Trennung in 6-er Blöcke fehlschlägt. Daher mein Vorschlag mit dem Pattern ".{6}\K".
Könntest Du mal ein abgespecktes aber lauffähiges Skript posten, welches eine von Dir verwendete "Zahl" mit x-Ziffern enthält?
Gruß Musashi