• Mahlzeit,

    Grrr - es ist nicht mein Tag. Das kommt davon wenn man ein Jahr keine Zeile Code geschrieben hatt:

    In einem beliebigen String, die beliebig oft vorkommenden Umlaute gegen etwas anderes z.B. ä=1, Ä=2 usw. ersetzen.

    Das folgende ist nat. falsch.

    $ohne = StringRegExpReplace ("ä_ber_ü_keiner", "[äÄüÖß]", "12345") --> Falsch!

    Ich bekomme es leider auf die Eile auch nicht richtig.

    Danke für die Hilfe.

    Peter

    Ps.: Und Danke, dass Ihr mir den Spott erspart :)

    Hinweise auf Suchmaschinen finde ich überflüssig - wer fragt hat es nicht gefunden oder nicht verstanden. Die Antwort gibt sich oftmals schneller als der Hinweis auf Dr. Goggle & Co.

    Ab 19-10-22 ergänzt um:

    Die Welt wird nicht bedroht von den Menschen, die böse sind, sondern von denen, die das Böse zulassen. (Albert Einstein)

    • Offizieller Beitrag

    Also ich vermute, dir schwebt eine Aktion: "Alles auf einmal Ersetzen" vor. Das geht jedoch nicht, bzw. ist es nicht unbedingt sinnvoll Konstrukte zu erstellen, die das hinbiegen. Das Ersetzen in einer Schleife ist hierfür sicher noch die schnellste Variante, ein Wert nach dem anderen. Und dann kannst du auch auf StringReplace zurückgreifen und benötigst kein RegEx.

  • Ja genau das hat mir vorgeschebt. Alle deutschen Umlaute raus aus den Strings..... Irgendwie hatte ich in Erinnerung das geht so...

    Aber wenn Du schon der Meinung bist, das sei Mist... wer kann es dann besser?

    Peter

    Hinweise auf Suchmaschinen finde ich überflüssig - wer fragt hat es nicht gefunden oder nicht verstanden. Die Antwort gibt sich oftmals schneller als der Hinweis auf Dr. Goggle & Co.

    Ab 19-10-22 ergänzt um:

    Die Welt wird nicht bedroht von den Menschen, die böse sind, sondern von denen, die das Böse zulassen. (Albert Einstein)

    • Offizieller Beitrag

    Oder du nimmst _StringRegExpReplace_Callback von Taz77 , das ist sauschnell:

  • Oder du nimmst _StringRegExpReplace_Callback von Taz77 , das ist sauschnell:

    Schöne Funktion :thumbup:

    Peter S. Taler : Hier eine eher rustikale Variante ^^

    AutoIt
    ; Ersetzt werden : Ä Ö Ü ä ö ü ß mit 1 2 3 4 5 6 7
    Global $aReplaceChars[8][2] = [[7],['Ä','1'],['Ö','2'],['Ü','3'],['ä','4'],['ö','5'],['ü','6'],['ß','7']]
    Global $sString = 'Satz mit Ä Ö Ü ä ö ü ß zum Ersetzen von Ä Ö Ü ä ö ü ß '
    
    For $i = 1 To $aReplaceChars[0][0]
        $sString = StringReplace($sString, $aReplaceChars[$i][0], $aReplaceChars[$i][1], 0, 1)
    Next
    
    ConsoleWrite('@@ Neuer String = ' & $sString & @CRLF)

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

  • :) Ich kenne mittlerweile auch eine extrem rustikale Variante Marke Eigenbau (Grins oder Schäm - >nicht ganz sicher)

    $klammeraffe = _HexToString ("1B5200401B5202") ; so hier wird es nun wirklich von hinten durch die Brust. Da es den

    ; Klammeraffen im Deutschen Zeichensatz nicht gibt: USA Zeichensatz
    ; ein 1B 52 00 Klammeraffe 40 deutschen Zeichensatz ein 1B 52 02

    $rr = StringRegExpReplace ($rr, "[ä]", "{")

    $rr = StringRegExpReplace ($rr, "[Ä]", "[")

    $rr = StringRegExpReplace ($rr, "[ö]", "|")

    $rr = StringRegExpReplace ($rr, "[Ö]", "\")

    $rr = StringRegExpReplace ($rr, "[ü]", "}")

    $rr = StringRegExpReplace ($rr, "[Ü]", "]")

    $rr = StringRegExpReplace ($rr, "[ß]", "á")

    $rr = StringRegExpReplace ($rr, "[@]", $klammeraffe)


    Danke an alle... Die Lösung von Bugfix schaue ich mir an - ist schlank so wollte ich es eigentlich - aber Bugfixes erster Post hat mich dann doch verunsichert....

    Gruß

    Peter


    Closed.....

    Hinweise auf Suchmaschinen finde ich überflüssig - wer fragt hat es nicht gefunden oder nicht verstanden. Die Antwort gibt sich oftmals schneller als der Hinweis auf Dr. Goggle & Co.

    Ab 19-10-22 ergänzt um:

    Die Welt wird nicht bedroht von den Menschen, die böse sind, sondern von denen, die das Böse zulassen. (Albert Einstein)

  • Ne ne ne ne ne, das wollen wir SO nicht stehen lassen!

    Erstelle ein 2D-Array in dem du die Kombinationen abspeicherst und laufe sie mit einer For-Schleife durch, aber nicht so!

    • Offizieller Beitrag

    aber Bugfixes erster Post hat mich dann doch verunsichert....

    :P

    Das war gar nicht meine Absicht. Aber keine der Lösungen kann alles auf einmal ersetzen. Die Callbackfunktion ist am Elegantesten, weil der String für die Suche nur einmal durchgegangen wird, von Match zu Match und dann entsprechend die Treffer ersetzt werden. Wenn du große Texte hast ist der Speed spürbar.

  • Wieso? geht fix mit Copy und Paste und tut was es soll ? Und an der Stelle hat das Programm viel Zeit....

    Aber ich gebe zu - nicht elegant, nicht schön - also schämmmmmm - sorry - Ich schreibs aber nicht mehr um. Und wenn dann nur auf BugFix....


    Peter :)

    Hinweise auf Suchmaschinen finde ich überflüssig - wer fragt hat es nicht gefunden oder nicht verstanden. Die Antwort gibt sich oftmals schneller als der Hinweis auf Dr. Goggle & Co.

    Ab 19-10-22 ergänzt um:

    Die Welt wird nicht bedroht von den Menschen, die böse sind, sondern von denen, die das Böse zulassen. (Albert Einstein)

  • Erstelle ein 2D-Array in dem du die Kombinationen abspeicherst und laufe sie mit einer For-Schleife durch, aber nicht so!

    Äh, inwiefern unterscheidet sich das von meiner Variante in Beitrag #5 ? :/

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

  • Mein rustikales Copy & Paste hat Ihn so aufgebracht --> Doppelpost :rofl:

    Hinweise auf Suchmaschinen finde ich überflüssig - wer fragt hat es nicht gefunden oder nicht verstanden. Die Antwort gibt sich oftmals schneller als der Hinweis auf Dr. Goggle & Co.

    Ab 19-10-22 ergänzt um:

    Die Welt wird nicht bedroht von den Menschen, die böse sind, sondern von denen, die das Böse zulassen. (Albert Einstein)

  • @ Alpines - Nun übertreib aber bitte nicht.

    Ja die Lösung ist vielleicht nicht schön aber auch nur 3 copy & paste Zeilen länger als die Schleife. Und Nein ich habe es nicht wirklich als Lösung gepostet (obwohl es funktioniert) - sondern als ironische Erweiterung von Musashis "Rustikal" Lösung. Und ja steht im Scribt bis ich mir Bugfix Lösung angesehen habe. Die halte ich für wirklich elegant. Und nochmal Tempo ist an dieser Stelle --> sinnlos!


    Peter

    PS.:

    Du kennst meine Finger nicht .........

    Hinweise auf Suchmaschinen finde ich überflüssig - wer fragt hat es nicht gefunden oder nicht verstanden. Die Antwort gibt sich oftmals schneller als der Hinweis auf Dr. Goggle & Co.

    Ab 19-10-22 ergänzt um:

    Die Welt wird nicht bedroht von den Menschen, die böse sind, sondern von denen, die das Böse zulassen. (Albert Einstein)

    • Offizieller Beitrag

    Hihi... wohl eher "schneckenlahm"... denn die Version von Musashi ist ca. 4x schneller!

    Bei 2 möglichen Treffern brauchst du gar nicht erst vergleichen, die gemessene Zeit reflektiert dann eher deine Raumtemperatur oder die Lautstärke der vorbeifahrenden Straßenbahn als die tatsächlich benötigte Zeit. Wir hatten mal in einem Thread zu Ersetzungen, diese Funktion als die um mindestens Faktor 10 schnellere festgestellt. Getestete Strings von mehreren Tausend Zeichen. Da kannst du die Arrayvariante dahinsiechen sehen. ^^

  • Schlage zur Kennzeichnung von langsammen Code ein neues Smily vor :)

    https://www.google.de/search?client=…KHSJtAkAQhyYIIg

    :rofl:

    Hinweise auf Suchmaschinen finde ich überflüssig - wer fragt hat es nicht gefunden oder nicht verstanden. Die Antwort gibt sich oftmals schneller als der Hinweis auf Dr. Goggle & Co.

    Ab 19-10-22 ergänzt um:

    Die Welt wird nicht bedroht von den Menschen, die böse sind, sondern von denen, die das Böse zulassen. (Albert Einstein)

  • Da nicht alle die Shoutbox mitlesen, bzw. als Gäste keinen Zugriff darauf haben, hier ein kleiner Nachtrag :

    BugFix hat in der Shoutbox folgenden Thread verlinkt :

    StringReplace mit RegExp-Pattern und Manipulation jedes Matches per Iteration

    Erwartungsgemäß ist die Funktion von Taz77 (Beitrag #4), speziell bei großen Texten, erheblich schneller.

    EDIT : Bezgl. der Aussage zur Geschwindigkeit gibt es neue Erkenntnisse ;)! Interessierte User sollten sich daher die Beiträge #21 und #22 ansehen !!

    Ich habe meinen trivialen Codeschnipsel (Beitrag #5) auch nicht gepostet, um gegen die o.a. Funktion anzutreten ;) !

    Für weniger versierte User, die eine einfache und für sie nachvollziehbare Lösung suchen, mag sie trotzdem hilfreich sein.

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

    Einmal editiert, zuletzt von Musashi (5. November 2017 um 11:50) aus folgendem Grund: Neue Erkenntnisse

  • So isses trivial aber jeder vesretehts...

    Hinweise auf Suchmaschinen finde ich überflüssig - wer fragt hat es nicht gefunden oder nicht verstanden. Die Antwort gibt sich oftmals schneller als der Hinweis auf Dr. Goggle & Co.

    Ab 19-10-22 ergänzt um:

    Die Welt wird nicht bedroht von den Menschen, die böse sind, sondern von denen, die das Böse zulassen. (Albert Einstein)

  • Bei 2 möglichen Treffern brauchst du gar nicht erst vergleichen, die gemessene Zeit reflektiert dann eher deine Raumtemperatur oder die Lautstärke der vorbeifahrenden Straßenbahn als die tatsächlich benötigte Zeit.

    Hehe, sehr treffend formuliert!:)

    Zuerst einmal: Hut ab für die Funktion von @Taz27 - hat er super gemacht! - In Zeile 9 (Post #4 von BugFix) fehlt meiner Meinung nach aber bei StringInStr() ein $STR_CASESENSE.

    Ich bin jetzt mal hingegangen und habe einen kleinen Test geschrieben, der alle meine Textdateien zu einer Datei verknüpft und in dieser dann die Umlaute ersetzt.

    So sieht das Ergebnis bei mir aus:

    Code
    Anzahl der geladenen Textdateien     = 186
    Länge der zusammengefügten Textdatei = 1650849 Bytes
    
    _StringRegExpReplace_Simple    Substitutions =  2959  Time: 178.625131 ms
    _StringRegExpReplace_Callback  Substitutions =  2959  Time: 315.959992 ms

    Und nun?

    Test

    Einmal editiert, zuletzt von Bitnugger (4. November 2017 um 21:15)

  • Und nun?

    Interessante Frage ;)

    Ich habe das Skript von Bitnugger einfach mal durchlaufen lassen.

    Einzige Änderung :

    Statt $sString aus diversen Textdateien zusammenzubauen, habe ich einen Basisstring 200.000 mal 'aufaddiert'. Das wäre als Buch zwar ausgesprochen reizlos, sollte dem Replace aber eigentlich egal sein.

    Konsolenausgabe :

    Basisstring = 'Satz mit Ä Ö Ü ä ö ü ß zum Ersetzen von Ä Ö Ü ä ö ü ß '

    Anzahl Wiederholungen = 200.000 mal

    Länge des generierten $sString = 10.800.000 Bytes

    _StringRegExpReplace_Simple Substitutions = 2800000 Time: 2435.909239 ms

    _StringRegExpReplace_Callback Substitutions = 2800000 Time: 31493.990628 ms

    Ob das Ganze als belastbares Testverfahren taugt, möchte ich nicht beurteilen :/

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