Translate$() + $Match

  • Vielleicht noch eine Anregung für X5.

    Ich weiß ja nicht, wie Roland bei Translate$() und eingeschaltetem Set(" RegEx", 1)

    arbeitet. Sinnvoll fände ich, wenn auch die Systemvariable $Match bei jedem Fund

    auch gesetzt würde. Das würde auch noch ein Einfügen von Zeichen vor und/oder

    hinter den Fundstellen auf einen Rutsch möglich machen. Also kein reines Ersetzen.


    Code
    Declare String s
    Cls
    s = "001B2C3D5D6F"
    Print Translate$(s1, "[a-fA-F0-9]{2}", "$" + $Match)
    Print Translate$(s1, "[a-fA-F0-9]{2}", "[" + $Match + "]")
    Waitkey

    Sei es nun ob zusammenhängende Bytecodes profantypisch aufzubereiten oder sonstige Zeichen

    vor oder hinter (oder beides) den Fundstellen reinzusetzen und als Ganzes zu ersetzen.

    Das dürfte an für sich keine große Aktion sein und wäre in manchen Situationen hilfreich.

  • Obwohl, da ist mir noch was eingefallen.

    Das oben genannte sollte dann auch mit und auch

    ohne eingeschaltetem RegEx funktionieren. Normalerweise

    haben wir Profanprogrammierer ja keinen Zugriff auf eine

    Funktion, die intern eine Schleife abarbeitet (Sonderfall : Move("...ToList", ...) ).

    Insofern ist ja das $Match in unserem speziellen Fall nicht interessant.

    Das müßte dann Roland intern regeln. Hier wäre ein Modus (0 oder 1)

    besser angebracht. Dieser steuert dann, ob Translate$() mit Modus 0

    arbeitet, wie bisher oder mit Modus 1 dann mit S3 zusammen ersetzt.

    Code
    Translate$(S1,S2,S3,Modus)

    wobei S3 dann so aussehen könnte :

    vorher|nachher

    Soll bedeuten, daß vor der Fundstelle, die dann auch übernommen wird,

    und nach der Fundstelle eingesetzt wird.

    Beispiel

    Code
    Print Translate$(S1, S2, "[|]", 1)

    Der senkrechte Strich (den wir ja bei z.B. AddString() und der Gridbox kennen) kennzeichnet dann

    auch zwei Literale, die eingesetzt werden. Ist eines der beiden Literale ein Leerstring, so wird halt nur

    das eine (vordere oder hintere) eingestezt. So ungefähr könnte man alles auf einen Schlag lösen.

    Und die Geschwindigkeit würde dann im Modus 0 nicht extra leiden.


    Vielleicht genügt es auch mit einer globalen Systemvariablen, die beide Versionen (mit und ohne RegEx)

    bedient, bzw. den Fundstring zurück gibt.

    Kommt jetzt natürlich darauf an, wie Roland das intern handhabt.


    Wäre mal so eine Idee von mir.

  • Sollte es mit $Match am einfachsten gehen, müßte diese ja

    nur bei den Fundstellen gesetzt werden, egal ob mit oder ohne

    Setzen der regulären Ausdrücke. Das gleiche wäre auch bei

    Instr() ohne Set("RegEx", 1) sinnvoll. Und dort auch noch

    die beiden anderen Systemvariablen %MatchPos und

    %MatchLen. Ich denke, daß Roland diese Systemvariablen

    auch ohne RegEx normal setzen kann.

    Damit wären das Suchen mit Instr() und das Ersetzen mit

    Translate$() wesentlich effektiver.

    Vielleicht könnte Roland das auch Per Patch hinzufügen.

    Da könnte er auch alle Versionen (Version 11, X2, X3, FreeProfan)

    berücksichtigen.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!