Ankündigung

Einklappen

Serverwartung 21.2.



Am 21.2. im Laufe des späten Abends wird eine Serverwartung durchgeführt. Das Forum ist dadurch für gut zwei Stunden nicht erreichbar.
Es wird eine Wartungsseite geschaltet.

Mehr anzeigen
Weniger anzeigen

Problem mit KO und str_replace

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

    Problem mit KO und str_replace

    Hallo,

    ich habe ein Problem mit str_replace. Das KO hat einen Wert = z.B. "100.0 Percent". Das "Percent" möchte ich weg haben.

    In der Hilfe steht:
    Code:
     [TABLE="class: tableHelp, width: 0"]
    [TR]
    [TD]str_replace(x,string1,string2)[/TD]
     			[TD]ersetzt jedes Vorkommen von string1 im String x durch string2[/TD]
     			[TD]{str_replace("HS4","HS","EDOMI")}[/TD]
     		[/TR]
    [/TABLE]
    Gemäss hier ist der Hilfetext aber falsch. Example

    Replace the characters "world" in the string "Hello world!" with "Peter":

    <?php
    echo str_replace("world","Peter","Hello world!");
    ?>

    Soweit so gut.
    Leider funktioniert ein {str_replace("Percent","",(#))}% aber trotzdem nicht.

    Wer weiss wie das geht ?

    Edit: Achja, es handelt sich um ein Universalelement. Und ein {str_replace("Percent","%",(#))} geht auch nicht.
    Zuletzt geändert von WagoKlemme; 18.06.2017, 19:37.
    >>Smelly One<<
    >> BURLI <<
    Grüße Armin

    #2
    Siehe http://www.knx-home.net/wiki/index.p...%B6glichkeiten

    Das kannst du lt. der Tabelle dort nicht angeben. Schau mal left() - das sollte helfen.

    Kommentar


      #3
      Doch, nach der Hilfe muss es gehen:

      Code:
       [TABLE="class: tableHelp, width: 0"]
      [TR]
      [TD="bgcolor: #f0f0f0, colspan: 3"][B]Allgemeine String-Funktionen
      			können sich sowohl auf den KO-Wert, als auch auf einen beliebigen anderen Wert beziehen[/B][/TD]
       		[/TR]
      [TR]
      [TD]str_left(x,n)[/TD]
       			[TD]n Zeichen von links des Strings x ausgeben[/TD]
       			[TD]{str_left("EDOMI",3)}[/TD]
       		[/TR]
      [TR]
      [TD]str_right(x,n)[/TD]
       			[TD]n Zeichen von rechts des Strings x ausgeben[/TD]
       			[TD]{str_right("EDOMI",3)}[/TD]
       		[/TR]
      [TR]
      [TD]str_mid(x,pos,n)[/TD]
       			[TD]n Zeichen ab der Position pos des Strings x ausgeben (pos beginnt mit 0)[/TD]
       			[TD]{str_mid("EDOMI",5,3)}[/TD]
       		[/TR]
      [TR]
      [TD]str_split(x,pos,sep)[/TD]
       			[TD]zerlegt den String x per Default bei jedem Vorkommen des Zeichens "|" und gibt den Teilstring mit dem Index pos zurück (beginnend bei 0)[/TD]
       			[TD]str_split("11|22|33|44",2) gibt 33 zurück
      
      			str_split("A-B-C-D",2,"-") gibt "C" zurück[/TD]
       		[/TR]
      [TR]
      [TD]str_len(x)[/TD]
       			[TD]gibt die Anzahl der Zeichen des Strings x zurück[/TD]
       			[TD]{str_len("EDOMI")}[/TD]
       		[/TR]
      [TR]
      [TD]str_replace(x,string1,string2)[/TD]
       			[TD]ersetzt jedes Vorkommen von string1 im String x durch string2[/TD]
       			[TD]{str_replace("HS4","HS","EDOMI")}[/TD]
       		[/TR]
      [TR]
      [TD]str_lcase(x)[/TD]
       			[TD]wandelt den String x in Kleinbuchstaben um[/TD]
       			[TD]{str_lcase("EDOMI")}[/TD]
       		[/TR]
      [TR]
      [TD]str_ucase(x)[/TD]
       			[TD]wandelt den String x in Großbuchstaben um[/TD]
       			[TD]{str_ucase("edomi")}[/TD]
       		[/TR]
      [TR]
      [TD]str_trim(x)[/TD]
       			[TD]entfernt "whitespace" am Anfang und Ende des Strings x[/TD]
       			[TD]{str_trim(" EDOMI ")}[/TD]
       		[/TR]
      [TR]
      [TD="bgcolor: #f0f0f0, colspan: 3"][B]KO-String-Funktionen 
      			beziehen sich immer auf den KO-Wert[/B][/TD]
       		[/TR]
      [TR]
      [TD]left(n)[/TD]
       			[TD]n Zeichen von links des KO-Werts ausgeben[/TD]
       			[TD]{left(3)}[/TD]
       		[/TR]
      [TR]
      [TD]right(n)[/TD]
       			[TD]n Zeichen von rechts des KO-Werts ausgeben[/TD]
       			[TD]{right(3)}[/TD]
       		[/TR]
      [TR]
      [TD]mid(pos,n)[/TD]
       			[TD]n Zeichen ab der Position pos des KO-Werts (String) ausgeben (pos beginnt mit 0)[/TD]
       			[TD]{mid(5,3)}[/TD]
       		[/TR]
      [TR]
      [TD]split(pos,sep)[/TD]
       			[TD]zerlegt den KO-Wert per Default bei jedem Vorkommen des Zeichens "|" und gibt den Teilstring mit dem Index pos zurück (beginnend bei 0)[/TD]
       			[TD]KO-Wert="11|22|33|44":
      			split(2) gibt 33 zurück
      
      			KO-Wert="A-B-C-D":
      			split(2,"-") gibt "C" zurück[/TD]
       		[/TR]
      [TR]
      [TD]len()[/TD]
       			[TD]gibt die Anzahl der Zeichen des KO-Wertes zurück[/TD]
       			[TD]{len()}[/TD]
       		[/TR]
      [TR]
      [TD]replace(string1,string2)[/TD]
       			[TD]ersetzt jedes Vorkommen von string1 durch string2[/TD]
       			[TD]{replace("HS","EDOMI")}[/TD]
       		[/TR]
      [/TABLE]
      Wenn ich es so wie in der Hilfe angebe, ging es nicht. Deshalb bin draufgekommen, dass die Hilfe nicht stimmt oder die Syntax dahinter.
      >>Smelly One<<
      >> BURLI <<
      Grüße Armin

      Kommentar


        #4
        Woher ist diese Hilfe? IMHO kann man dort keine php Programme hinterlegen, sondern nur jene Funktionen aus der Hilfe-Seite, welche ich Dir geschickt habe. So stehts zumindest am Wiki beschrieben.

        Siehe: http://www.knx-home.net/wiki/index.php?title=Visu

        Eingabe-Möglichkeiten

        In allen hellgrün hinterlegten Eingabefeldern können beliebige Werte und Berechnungen auf der Grundlage des dem Visu-Element zugewiesenen Steuerungs-KOs durchgeführt werden. Der KO-Wert wird durch {#} repräsentiert und in der Visualisierung durch den aktuellen KO-Wert ersetzt.

        Eine komplette Aufstellung finden Sie hier: weiter zu Übersichtstabelle

        Tab-Stops zb. im Beschreibungsfeld können über diese Html Entity &emsp; oder &ensp; eingefügt werden

        Kommentar


          #5
          ahh sorry. war zu schnell. diene hilfe ist tatsächlich iwie von edomi..
          hab grad deinen hilfe text gelesen..
          ersetzt jedes Vorkommen von string1 im String x durch string2 d.h. str_replace("willi otto", "willi", "heino") --> "heino otto"
          habs nicht getestet, aber lt. hilfe wird arg2 mit arg3 ersetzt.
          Zuletzt geändert von WWebber; 18.06.2017, 21:00.

          Kommentar


            #6
            Die Funktion (und die Hilfe) beziehen sich auf Visuelemente und hat mit PHP nix zu tun. Ein {str_replace(#,"Percent","")} in der Beschriftung sollte also funktionieren.
            EDOMI - Intelligente Steuerung und Visualisierung KNX-basierter Elektro-Installationen (http://www.edomi.de)

            Kommentar


              #7
              Ich habe die funktion nicht im wiki nicht beschrieben gefunden und dachte daher dass wagoklemme von php schreibt.. war ein misverständnis!

              Kommentar


                #8
                Zitat von gaert Beitrag anzeigen
                Die Funktion (und die Hilfe) beziehen sich auf Visuelemente und hat mit PHP nix zu tun. Ein {str_replace(#,"Percent","")} in der Beschriftung sollte also funktionieren.
                Gerade nochmal (zum x-ten Mal) getestet. So {str_replace(#,"Percent","")} geht es leider nicht.
                >>Smelly One<<
                >> BURLI <<
                Grüße Armin

                Kommentar


                  #9
                  Sorry, mein Fehler... Versuche mal die Funktion "replace()" statt "str_replace" zu verwenden - dann sollte es klappen: {replace("Percent","")}
                  EDOMI - Intelligente Steuerung und Visualisierung KNX-basierter Elektro-Installationen (http://www.edomi.de)

                  Kommentar


                    #10


                    Danke, so gehts.
                    Ich dachte bei replace fehlt der KO(-Variablen)-Bezug, aber der ist anscheinend mit den { } gegeben.
                    >>Smelly One<<
                    >> BURLI <<
                    Grüße Armin

                    Kommentar


                      #11
                      Jetzt hat sich ergeben, dass ich 2 Werte für weitere Berechnungen benötige.
                      Hier mein LBS, falls jemand an einem ähnlichen Problem brütet:

                      Code:
                      ###[DEF]###
                      [name        =String replace        ]
                      
                      [e#1        =String     ]
                      [e#2        =Suchstring     ]
                      [e#3        =Ersatz     ]
                      
                      [a#1        =String        ]
                      [a#2        =Float        ]
                      [a#3        =Integer    ]
                      ###[/DEF]###
                      
                      
                      ###[HELP]###
                      Dieser Baustein ersetzt Zeichenketten in einem String.
                      
                      E1: String triggert den Baustein
                      E2: Die Zeichenkette, die ersetzt werden soll. ACHTUNG ! Eingabe der Strings OHNE Anführungszeichen !
                      E3: Die Ersatz-Zeichenkette, die im Ergebnis erscheinen soll ACHTUNG ! Eingabe der Strings OHNE Anführungszeichen ! Bei Leerstring Feld einfach LEER lassen.
                      A1: Ergebnis String mit ersetzter Zeichenkette
                      A3: Ergebnis als Float wenn der String eine Float enthält
                      A3: Ergebnis als Integer wenn der String eine Integerzahl  enthält
                      ###[/HELP]###
                      
                      
                      ###[LBS]###
                      <?
                      function LB_LBSID($id) {
                          if ($E=logic_getInputs($id)) {
                      
                              if (!isEmpty($E[1]['value']) && $E[1]['refresh']==1) {
                                  $str=str_replace($E[2]['value'],$E[3]['value'],$E[1]['value']);
                                  $str=trim($str);
                                  logic_setOutput($id,1,$str);
                                  $float=floatval($str);
                                  logic_setOutput($id,2,$float);
                                  $int=intval($str);
                                  logic_setOutput($id,3,$int);
                              }
                      
                          }
                      }
                      ?>
                      ###[/LBS]###
                      
                      
                      ###[EXEC]###
                      <?
                      
                      ?>
                      ###[/EXEC]###
                      >>Smelly One<<
                      >> BURLI <<
                      Grüße Armin

                      Kommentar


                        #12
                        Ist denn der LBS nicht besser im DL Portal aufgehoben?

                        Kommentar


                          #13
                          Hast schon Recht. Aber ich dachte halt er passt zum Thema und ist es doch gar nicht wert aufs DL Portal zu legen. Der müllt das Portal nur zu.
                          >>Smelly One<<
                          >> BURLI <<
                          Grüße Armin

                          Kommentar


                            #14
                            Da es dort mittlerweile 3 oder 4 LBS gibt die *2,55 und /2.55 rechnen, ist das aber auch schon egal.

                            Kommentar


                              #15
                              Nagut, wenn Du meinst...
                              HIER bitte.
                              >>Smelly One<<
                              >> BURLI <<
                              Grüße Armin

                              Kommentar

                              Lädt...
                              X