StringReplace

  • Moin zusammen.

    Ich habe eine Frage zu "StringReplace".

    Ich habe einen String Bsp.: "123456789". Nun möchte ich ein Replace durchführen wie folgt.
    Ersatze die Ziffer "1" durch "a", "j", "t" oder die Ziffer "1" soll bleiben.
    Also entweder wird die Ziffer "1" getauscht durch die Buchstaben oder halt nicht, um es anders zu sagen.

    Im Bsp. steht die Ziffer 1 an erster stelle, aber sie kann in einem String auch mehrfach vorkommen und muss nicht an erster Stelle sein.
    Bei jeder ZIffer "1" soll entschieden werden, ob diese durch einen der drei Buchstaben ersetzt wird oder bleibt.

    Somit kann danach der String wie folgt aussehen: "a23456789" oder "j23456789" oder "t23456789" oder "123456789"

    Wie löse ich dieses Problem ????


    Ich wünsche an dieser Stelle schon mal allen einen guten Rutsch ins neue Jahr.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • Wie löse ich dieses Problem ????

    Hier ein Ansatz mit StringReplace :

    Code
    Local $sString = "12345678901234567890", $sStringNew
    Local $aArr_1[4] = ["1", "a", "j", "t"] ; Ersetzungszeichen für "1"
    $sStringNew    = StringReplace($sString, "1", $aArr_1[Random(0, 3, 1)])
    ConsoleWrite($sString & " --> " & $sStringNew & @CRLF)

    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 formuliere deine Frage mal um:

    Um größtmögliche Verwirrung zu stiften, darf bei einer Ersetzungsoperation für die Ziffer 1 ein beliebiger Platzhalter aus der Gruppe [1,a,j,t] verwendet werden. Wie geht das?

    Mein Tipp: Eine Funktion, die in einer Schleife nach den Vorkommen von "1" und sucht und mit Random aus der Gruppe das Ersetzungszeichen einfügt.

  • Moin,

    noch eine Möglichkeit: String mit StringSplit(String, "1", 3) aufteilen und mit zufälligen Ersatzzeichen wieder zusammensetzen.

    Guten Rutsch! :party1:

  • Moin,

    noch eine Möglichkeit: String mit StringSplit(String, "1", 3) aufteilen und mit zufälligen Ersatzzeichen wieder zusammensetzen.

    Guten Rutsch! :party1:

  • Hier ein Ansatz mit StringReplace :

    Code
    Local $sString = "12345678901234567890", $sStringNew
    Local $aArr_1[4] = ["1", "a", "j", "t"] ; Ersetzungszeichen für "1"
    $sStringNew    = StringReplace($sString, "1", $aArr_1[Random(0, 3, 1)])
    ConsoleWrite($sString & " --> " & $sStringNew & @CRLF)


    Der Ansatz gefällt mir.

    Nur wenn er sich einmal entschieden hat, die "1" z. B. durch "a" zu ersetzen, macht er das überall wo die "1" ist. Ich dachte mir das so, das er die "1" mal durch ein "a", mal durch ein "j" und mal durch ein "t" ersetzt oder auch mal die "1" behält.

    So das der NewString dann z. B. so aussieht:
    vorher: 123456789012345678901234567890123456789012345678901234567890
    nachher: j234567890a2345678901234567890t234567890 j234567890t234567890


    Wäre das machbar?

    BugFix :
    Vielen Dank für das umformuliere meine Frage.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

    2 Mal editiert, zuletzt von Alina (29. Dezember 2023 um 20:07)

  • So das der NewString dann z. B. so aussieht:
    vorher: 123456789012345678901234567890123456789012345678901234567890
    nachher: j234567890a2345678901234567890t234567890 j234567890t234567890

    Wäre das machbar?

    Eine Möglichkeit wäre :

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

  • Eine Möglichkeit wäre :

    DANKE, das ist die Lösung soweit ich es jetzt getestet habe.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • Moin,

    ich finde funkey's StringInStr() Lösung sehr gut, weil sie der Funktion von StringReplace() sehr nahe kommt. Ich hatte das verworfen, weil mir nicht eingefallen ist, dass der zweite Parameter von StringReplace() auch eine Positionsangabe sein kann.

    Wenn es aber eine StringSplit() basierte Lösung sein soll, bevorzuge ich meine in Beitrag #5 vorgeschlagene Variante, weil sie ressourcenschonender ist, wenn der String nicht ausschließlich aus dem zu ersetzenden Zeichen besteht.

    Guten Rutsch! :party1:

  • AutoIt
    Local $aRepl=StringSplit('1|a|j|t|abc|bnm|xxx|zzz','|'),$sString='1234567890123456789012345678901234567890123456789012345678901end',$aString=StringSplit($sString,1),$sText=$aString[1]
    For $i=2 To $aString[0]
    $sText&=$aRepl[Random(1,$aRepl[0],1)]&$aString[$i]
    Next
    MsgBox(4096,'$sText',$sText)

    Einmal editiert, zuletzt von Andrey_A (15. Januar 2024 um 16:07)

  • Alina 15. Januar 2024 um 18:16

    Hat das Thema freigeschaltet.
  • Moin Andrey_A

    AutoIt
    Local $aRepl=StringSplit('1|a|j|t|abc|bnm|xxx|zzz','|'),$sString='1234567890123456789012345678901234567890123456789012345678901end',$aString=StringSplit($sString,1),$sText=$aString[1]
    For $i=2 To $aString[0]
    $sText&=$aRepl[Random(1,$aRepl[0],1)]&$aString[$i]
    Next
    MsgBox(4096,'$sText',$sText)

    Erst einmal Willkommen im Forum.

    Deine Lsg. kann nicht zum Erfolg führen da:
    - nicht '1|a|j|t|abc|bnm|xxx|zzz' sollte ersetzt werden, sondern nur die "1" durch '1|a|j|t' (Ziffer bleibt oder einer der drei Buchstaben).
    - in Deinem $sString ($sString='1234567890123456789012345678901234567890123456789012345678901end') Buchstaben sind und diese nicht der "Vorgabe" entsprechen.
    Der Ausgangsstring ist ein reiner ZIffern (Zahlen 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0).

    Beitrag 7, 8, und 10 haben bereits erfolgreich zur Lösung geführt !

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • Alina 15. Januar 2024 um 18:30

    Hat das Label [ gelöst ] hinzugefügt.
  • Alina
    Dies ist nur ein Beispiel
    Mit einem großen Eingangsvolumen von 10 - 20 MB Megabyte des Textes mit '1 | a | j | t' meine Funktion ist die schnellste, kurz und bereit, zufällige Daten zu erhöhen
    Mag es nicht - benutze nicht

    2 Mal editiert, zuletzt von Andrey_A (15. Januar 2024 um 19:32)