String von nicht Zahlen säubern und formartieren

  • Hallo,

    ich lade ein Datei ein und will nur die Zahlen beibehalten.

    Anschliessend soll alles in eine Editbox rein.

    Die Datei sieht z.B. so aus:

    0 0 0 An explosion of lava ... by D. Egnor

    60 60 60

    64 60 60

    72 60 60

    76 56 56

    100 48 48

    108 48 48

    112 44 44

    212 12 12

    224 8 8

    232 8 8

    236 4 4

    244 4 4

    252 12 0

    252 20 0

    252 28 0

    160 0 0

    156 4 4

    152 4 4

    148 8 8

    140 12 12

    104 32 32

    100 36 36

    100 36 36

    96 40 40

    88 44 44

    60 60 60

    60 60 60

    Das Ergebniss sollte anschliessend wieder so aussehen:

    0 0 0

    60 60 60

    64 60 60

    72 60 60

    76 56 56

    100 48 48

    108 48 48

    112 44 44

    212 12 12

    224 8 8

    232 8 8

    236 4 4

    244 4 4

    252 12 0

    252 20 0

    252 28 0

    160 0 0

    156 4 4

    152 4 4

    148 8 8

    140 12 12

    104 32 32

    100 36 36

    100 36 36

    96 40 40

    88 44 44

    60 60 60

    60 60 60

    Es sollen alle nicht Zahlen und nur ein Leerschritt zwischen den Zahlen bestehen bleiben.

    Ich habe bisher das, das ich alle nicht Zahlen und und Leerschritte enferne.

    Nur wie bekomme ich es hin, das er nach jeder 3. Zahl eine @lf macht?

    Mein Ergeniss sieht leider so aus:

    0 0 0 60 60 60 64 60 60 72 60 60 76 56 56 100 48 48 108 48 48 112 44 44 212 12 12 224 8 8 232 8 8 236 4 4 244 4 4 252 12 0 252 20 0 252 28 0 160 0 0 156 4 4 152 4 4 148 8 8 140 12 12 104 32 32 100 36 36 100 36 36 96 40 40 88 44 44 60 60 60 60 60 60

    • Offizieller Beitrag

    Alles in einem Rutsch:

  • Hallo BugFix ,

    nicht zu fassen, eine Zeile und es ist erledigt, Hammer :)

    Da wäre ich nicht draufgekommen.

    Um bei der ersten Zeile die beiden Leerstellen vor der 0 zu entfernen und die letzte leere Zeile zu löschen, das mache ich händisch in der Editbox.

    Oder geht das auch?

    Ersteinmal Dank.

    • Offizieller Beitrag

    Oder geht das auch?

    Klar, ich hatte nur anhand deines Eintrags im Post das Pattern erstellt und nicht die Datei geladen:

  • Hi BugFix ,

    Hammer, mit diesen regulären Ausdrücken komme ich ja garnicht zurecht, da muss ich noch was lernen.

    Die letzte leere Zeile löschen bekomm ich dann hoffentlich selber hin.

    Vielen Dank für deine Hilfe.

  • Hi BugFix ,

    lösche die letzte leere Zeile mit StringStripWS($sResult, 1+2)


    Das ganz sieht jetzt so aus:

    Code
    Local $sResult = StringRegExpReplace($string, '(?m)\s*(\d+)\s+(\d+)\s+(\d+)(\D*)', '\1 \2 \3' & @CRLF)
    $out = StringStripWS($sResult, 2)
    ConsoleWrite($out)

    Also, nochmals vielen Dank.:klatschen:

    Einmal editiert, zuletzt von ruby (13. März 2019 um 14:17)

  • lösche die letzte leere Zeile mit StringStripWS($sResult, 1+2)

    In dem Bsp. von BugFix wird durch das ConsoleWrite ein zusätzliches @CRLF ausgegeben und da der String selbst auch mit einem @CRLF endet, hast du eines zu viel...

    Hier wieder als Einzeiler. ;)

    Code
    ; Diese Pattern funktioniert auch, wenn Zeilen mit Leerzeichen|Tabs beginnen und es ist auch egal, ob die letzte Zeile mit oder ohne @CR|@LF|@CRLF endet.
    Local $sResult = StringRegExpReplace($s, '(?m)(?:^\s+)?(\d+)\s+(\d+)\s+(\d+)(?:.*\R)?', '\1 \2 \3' & @CRLF)
    ConsoleWrite($sResult)
    
    ; Wenn du das @CRLF der letzten Zeile noch weg haben willst...
    Local $sResult = StringStripWS(StringRegExpReplace($s, '(?m)(?:^\s+)?(\d+)\s+(\d+)\s+(\d+)(?:.*\R)?', '\1 \2 \3' & @CRLF), 2)
    ConsoleWrite($sResult)

    Einmal editiert, zuletzt von Bitnugger (13. März 2019 um 19:16)

  • vielen Dank, da wird einem ja ganz schwindelig bei den vielen ?m)^\s+(\d+)....

    Ja, solche Pattern sind alles andere, aber definitiv nicht augenfreundlich... das ist aber immer so, wenn man eine "Sprache" nicht versteht.

    PS: Ich habe obiges Script noch mal ein wenig geändert!