Ankündigung

Einklappen
Keine Ankündigung bisher.

Makros und Argumente

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

    Makros und Argumente

    Handbuch: "Die Argumente des Makros werden als reine Textersetzungen im Makrocode genutzt."

    Code:
    :begin RolloAlarmEmailFensterschliessen(Name, [B]pFenstername[/B])
    :info $Sendet Emailaufforderung, das Fenster zu schließen$
    
    //Griffstatus: 0 = offen, 1 = gekippt, 2 = geschlossen
    
    :var maxTime@
    :var restTime@
    :var faktorGekippt@
    :var test@
    maxTime@ = 30u64 * 60000u64
    restTime@ = 0u64
    faktorGekippt@ = 1u64
    [B]test@ = $pFenstername$[/B]
    test@ soll also ein string mit einer Textersetzung aus pFenstername (== "Klofenster Erdgeschoß") sein und müsste dann also den String $Klofenster Erdgeschoß$ enthalten...

    Denkste:
    Parameter.JPG

    Ich kann da keine dem Handbuch und meiner Erwartung entsprechende "reine Textersetzung" erkennen....

    #2
    Hi,

    übergebe entweder gleich den String $Klofenster$ an das Makro, dann kannst du pFenstername direkt zuweisen, oder verwende $$+pFenstername. Die Ersetzung erfolgt nicht innerhalb von Strings.

    Kommentar


      #3
      Danke, foobar0815 !

      Dann gehört das aber dringend ins Manual - weil's eben keine reine Textersetzung ist. Mir wäre die "reine" Textersetzung lieber, da weiß man dann, was man hat.

      Kommentar


        #4
        Aber woher soll er dann wissen das pFenstername im String eine variable ist und kein Text somit macht doch $$+pFenstername sinn

        Kommentar


          #5
          Das ist übrigens kaum nachvollziehbar inkonsequent umgesetzt: Ich mach mal einen Vergleich von Quellcode und tmpMacroOut.txt:

          Im vorher diskutierten Teil rührt sich nichts - mitten im Code aber schon...

          pFenstername ist hierbei "Badfenster Obergeschoß"
          Quellcode tmpMacroOut.txt
          test@ = $pFenstername$ __RolloAlarmEmailFensterschliessen_95__test = $pFenstername$
          sendhtmlmail($x@x.de$,$EibPC: pFenstername bitte schließen!$, $Meldung vom EibPC:<br><br>Bitte pFenstername schließen!$); sendhtmlmail($x@x.de$,$EibPC: Badfenster Obergeschoß bitte schließen!$, $Meldung vom EibPC:<br><br>Bitte Badfenster Obergeschoß schließen!$)
          Da kann man dann schon verzweifeln, wenn es mal so - mal so geht mit der "reinen" Textersetzung

          Kommentar


            #6
            Zitat von PharaDOS Beitrag anzeigen
            Aber woher soll er dann wissen das pFenstername im String eine variable ist und kein Text somit macht doch $$+pFenstername sinn
            Bei der Textersetzung zum Erstellen der txtMacroOut.txt braucht er ja auch nix zu wissen, sondern schlicht nur s = s.Replace("pFenstername", pFenstername) zu machen, um es in C# auszudrücken...

            Kommentar


              #7
              Zitat von klaus_kraemer Beitrag anzeigen
              Handbuch: "Die Argumente des Makros werden als reine Textersetzungen im Makrocode genutzt."
              Ja was aber noch nicht ganz das wie beschreibt .
              Im Handbuch steht dazu weiter:
              Ein Sonderzeichen bei der Textersetzung ist das „^“-Zeichen. Mit diesem kann die Textersetzung so erweitert werden, dass aus zwei Wörtern zusammengesetzte Variablen entstehen. Das „^“-Zeichen wird dabei gelöscht. Die gleiche Wirkung erzielt man mit dem „_“-Zeichen, wobei dieses Zeichen nicht gelöscht wird.
              Die "Textersetzung" sucht immer nach Anfang und Ende einer möglichen Anwendung: Dies können Leerzeichen, Rechenzeichen, Klammern, Stringmarker "$" sein. Eben alles was, eine Begrenzung für den Compiler darstellt. Daher würde wenn pFenstername mit Wohnen ersetzt wird
              Code:
              [B]test@ = $ pFenstername $  : wird zu $ Wohnen $
              test@ = $-pFenstername+$ : wird zu $-Wohnen+$ [/B]
              [B]test@ = $_pFenstername_$ : wird zu $_Wohnen_$
              test@ = $^pFenstername^$ : wird zu $Wohnen$ [/B]
              Ich vermute, du würdest die letzte Variante wollen.
              Edit: innerhalb eines Strings selbst wird das $ nicht zur Text-Begrenzung für die Ersetzung führen. Das verursacht hier wohl Probleme.
              Dies werden wir in die Doku mit aufnehmen, damit es klar auch für andere klar wird, die so tief einsteigen .
              Eins ist aber klar: Die Software ist C++ und nicht so ein olles Microsoftzeug (wer will denn sowas programmieren;-).

              Klar könnte man hier auch mit anderer Strategie ersetzten, aber die Regeln hatten sich seinerzeit als so praktisch erwiesen. Man will ja u.U. nicht immer alles im Makro durch den Text ersetzen: Hier
              Code:
              [B]test@ = $Super pFenstername$ : wird zu $Super pFenstername$ [/B]
              würde das vielleicht so gewollt sein. Wenn nicht, müsste man
              Code:
              [B]test@ = $Super pFenstername^$ : wird zu $Super Wohnen$
              test@ = $Super ^pFenstername^$ : wird zu $Super Wohnen$ [/B]
              coden. Ich würde da immer die letzte Variante bevorzugen, dann wird das klarer.
              Zuletzt geändert von enertegus; 13.02.2021, 19:19.
              offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
              Enertex Produkte kaufen

              Kommentar


                #8
                Zitat von enertegus Beitrag anzeigen
                Eins ist aber klar: Die Software ist C++ und nicht so ein olles Microsoftzeug (wer will denn sowas programmieren;-).
                ICH!!!

                Danke enertegus ! Schön, wenn das im Handbuch mit diesen Beispielen so Platz fände!

                Da möcht' ich auch noch an "stringformat" erinnern, das bräuchte auch mal eine Reihe prägnanter Beispiele mit verschiedenen Variablentypen und Parametrierungen. Ich musste wegen eines Stringformats heute ca. 10 mal die Kiste flashen, bis es passte...

                Schönes Wochenende noch!

                Kommentar

                Lädt...
                X