Ankündigung

Einklappen
Keine Ankündigung bisher.

Ich vermisse eine (rekursive)(text-)replace funktion…

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Ich vermisse eine (rekursive)(text-)replace funktion…

    Ich würd gern alle Telegramme via mqtt publishen DER Form dass sich das Topic as dem Gruppenadressen-Namen ergibt.
    Beispiel für meine GA-Namen im eibpc2: “EGK_JALB1UP_Status_Oben-2/6/37”, “EGK_JALB1UP_Sperren-2/6/45”, etc…
    Telegramme sollen folgende Topics publishen:
    KNX/2/6/37/EGK/JALB1UP/Status/Oben 0
    KNX/2/6/45/EGK/JALB1UP/Sperren 0
    etc.
    wie kann ich denn alle (dynamische Anzahl) “_-“ in Text durch “/“ ersetzen?

    wär es nicht möglich regular expressions bei Zeichenketten beim finden/(er)setzen zu unterstützen?

    #2
    getganame liefert schonmal den Namen. Den musst du dann mit find und stringset anpassen.

    Bin aber gerade selbst überrascht, dass wir keine replace bzw. replaceall-Funktionen haben und bisher scheinbar auch noch nie ernsthaft gebraucht haben.

    Mit find/split und + lässt sich das vmtl. erledigen, das rekursive sollte durch ein if change(x) then x=... endif abgebildet werden können. Aber schön und leicht verständlich ist das nicht.

    Regex dafür einzubauen ist so eine Sache. Perl? Sed? Grep? GNU libc? Wenn dann letztere, aber ich vermute, außer dir und mir wird sie kaum jemand nutzen.

    Kommentar


      #3
      reicht doch *g*

      edit: gibts ne Chance auf nen Einbau einer replace-fn im nächsten fw-Update, zusammen mit optional-chaining-refactoring?

      und wann?

      achja: und eigene Icons Bitte!!!

      Kommentar


        #4
        Zitat von foobar0815 Beitrag anzeigen
        …das rekursive sollte durch ein if change(x) then x=... endif abgebildet werden können…
        Dazu eine Verständnisfrage:
        „if change() then…“ würde doch je Zyklus ein weiteres Zeichen ersetzen, oder wird je Zyklus mehrfach das Argument change() invalid? Vermutlich nicht, das heißt dann das ein WEITERES Telegram WÄHREND der „Rekursion“ dann das Ersetzen „zerstört“, damit würde dann das ursprüngliche Telegramm via MQTT NICHT geschickt werden…

        das sollte so also gar nicht stabil funktionieren, oder?

        das Ersetzen muss schon innerhalb eines Zyklus stattfinden…

        Kommentar


          #5
          replace bzw. replaceall-Funktionen
          ja bitte!!!!

          die Lösung mit "if change" könnte eine Hilfsvariable verwenden, die erst "wahr" ist, wenn keine Ersetzung mehr gefunden wurde

          EPIX
          ...und möge der Saft mit euch sein...
          Getippt von meinen Zeigefingern auf einer QWERTZ Tastatur

          Kommentar


            #6
            Ja, aber die Hilfsvariable wird bei JEDEM Telegramm benötigt, und die Ersetzung dauert mehrere Zyklen, und je Zyklus bzw. je Ersetzung können mehrere Telegramme eintreffen… also ohne Array/fifo-buffer wird das nicht stabil, es ist also eine modale replace-fn notwendig.

            Kommentar


              #7
              da müsste man jetzt die Zykluszeit des eibPC bzw der KNX-Telegrammrate vergleichen um zu sehen, wieviele eiPC-Zyklen zwischen 2 KNX-Telegrammen möglich sind....
              Aber du hast schon recht: schön wäre es natürlich mit replace-fn!
              EPIX
              ...und möge der Saft mit euch sein...
              Getippt von meinen Zeigefingern auf einer QWERTZ Tastatur

              Kommentar


                #8
                da darf gar nix verglichen werden, das läuft so nicht vorhersehbar stabil in nem eventgetriebenen, parallelen System.

                Der Text wird bei eintreffendem Event gesetzt getganame() und ist gleichzeitig die Hilfsvariable selbst: wenn bei if change() ein “find” ein zu ersetzendes Zeichen findet wird es ersetzt, womit im nächsten Zyklus if change() wieder prozessiert wird, anderenfalls wird das topic published. Kommt ein weiteres Telegramm, dann wird der Text in jedem Fall wieder geändert (und enthält mindestens ein zu ersetzendes Zeichen “-“) da ja zwischenzeitlich mindestens EIN Zeichen geändert wurde. Kommt das weitere Telegramm früher als der Zeitpunkt an dem es nichts mehr zu ersetzen gibt dann geht das ursprüngliche Telegramm via MQTT “verloren”.

                das funktioniert so nicht.

                Kommentar

                Lädt...
                X