stringsplitt ohne Trennzeichen

  • 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.

    ...... Lieben Gruß, ........
    ...........
    Alina ............

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    Ich habe die Deutsche Hilfe auf meinem PC und
    OrganizeIncludes ist beim Scripten mein bester
    Freund. Okay?

  • AspirinJunkie
    Du bist mein Held des Abends. D A N K E

    Die Originallänge der Strings sind jeweils ca. 4800 - 7500 Buchstaben/Zahlen.

    Getestet und läuft einwandfrei ! ! !

    ...... Lieben Gruß, ........
    ...........
    Alina ............

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    Ich habe die Deutsche Hilfe auf meinem PC und
    OrganizeIncludes ist beim Scripten mein bester
    Freund. Okay?

  • 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 ?!? :cursing:



    ...... Lieben Gruß, ........
    ...........
    Alina ............

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    Ich habe die Deutsche Hilfe auf meinem PC und
    OrganizeIncludes ist beim Scripten mein bester
    Freund. Okay?

  • Das mag er nicht: $input2 = StringRegExpReplace($input2, "\w{6}\K", "|") WARUM NICHT ?!?

    Sollte aber funktionieren.

    AutoIt
    Local $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 ?

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

    Einmal editiert, zuletzt von Musashi ()

  • 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. :(

    ...... Lieben Gruß, ........
    ...........
    Alina ............

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    Ich habe die Deutsche Hilfe auf meinem PC und
    OrganizeIncludes ist beim Scripten mein bester
    Freund. Okay?

  • 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 :

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • 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:

    Code
    ConsoleWrite("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.


    Ich mache mich mal weiter auf die Suche. ;)

    ...... Lieben Gruß, ........
    ...........
    Alina ............

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    Ich habe die Deutsche Hilfe auf meinem PC und
    OrganizeIncludes ist beim Scripten mein bester
    Freund. Okay?

    Einmal editiert, zuletzt von Alina ()

  • 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

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."