Ankündigung

Einklappen
Keine Ankündigung bisher.

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