Ankündigung

Einklappen
Keine Ankündigung bisher.

Stringformat Auffüllen mit Leerzeichen

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

    Stringformat Auffüllen mit Leerzeichen

    Hallo Zusammen,
    ich probiere gerade einen String an eine button zu übergeben.
    Dabei möchte ich die Position in f16 als ganze Zahl mit genauer Stringlänge anzeigen.
    Basierend auf dem Handbuch stringformat(pi, 4, 1, 10, 4)
    stringformat(convert("PosT15-46/50/146",0f16) * 100f16 / 255f16 , 4 , 1 , 3 , 0 ) + $ %$
    Ich bekomme aber nie (mehre Einstellungen ausprobiert) eine feste Länge hin. da Unterschiedlich : 0 % (l=3) 26 % (l=4) und 100% (l=5) ist immer das Resultat
    Mein Ziel wäre Rechtsbündig dh Links auffüllen bis auf die vorgegebene max Länge.

    Bin mir sicher das es geht aber die Argumente bekomme ich nicht richtig gesetzt anscheinend.

    Grüße

    Hannes

    #2
    Schaut so aus, als ob im Handbuch ein Fehler wäre. Probier mal

    stringformat(convert("PosT15-46/50/146",0f16) * 100f16 / 255f16 , 4 , 4 , 3 , 0 ) + $ %$

    Die stringformat-Funktion war im Handbuch immer schon spärlich beschrieben, das ist zwar jetzt besser, aber immer noch recht rudimentär für die Fülle der möglichen Parametrierungen - und an diesem Punkt vermutlich auch fehlerhaft.

    Kommentar


      #3
      Hallo Klaus,

      danke für die Hilfe.Die Stringformat ist definitv auch nicht einfach verständlich erklärt.
      Leider ist die 4 an der Position auch nicht das was ich brauche.
      Nun hab ich zwar immer 2 Nummern die angezeigt werden aber ich möchte halt gerne rechtsbündig schreiben. Sodass sich die Mengeneinheit ( hier % ) nicht bewegt egal ob 1 stellig, 2 Stellig oder 3 Stellig...
      Schwerer Tobak ...
      Es werden einfach keine Leerzeichen vorran gestellt...
      Irgendwas mach ich doch falsch^^

      Grüße



      Kommentar


        #4
        Tja, dann hoffe ich, die enertegus - Truppe schaut hier mal (und nimmt vielleicht noch weitere Beispiele ins Handbuch auf, z.B. wenn Genauigkeit auf "0" gesetzt wird. Ich hatte die Problemstellung rechtsbündig noch nie...

        Was bedeutet eigentlich die Beschreibung im Handbuch zu Formatparameter "4", wenn es dort heißt
        "4: Auffüllen mit Nullen und Leerzeichen bei positiver Zahl (nur zulässig, falls Data
        vom Datentyp sXX oder fXX und keine Umwandlung ins Oktal- oder Hexadezimalformat;
        wird ignoriert, falls Data vom Datentyp uXX oder sXX bzw. falls bei den Fließkommazahlen
        die Präzision anderweitige Ausdrücke generiert.
        "
        Nullen UND Leerzeichen? Gewürfelt oder sortiert?

        Dann gibt es noch die sog. "alternativen Formatierungen" wie
        "13: Alternative Formatierung (s.u), Auffüllen mit Nullen und Leerzeichen bei positiver
        Zahl (nur zulässig, falls Data vom Datentyp fXX)
        "

        Steht da "s.u." für Suche umsonst? Weil siehe unten siehste nix... Beispiele natürlich Fehlanzeige!

        HG
        Klaus

        Kommentar


          #5
          Genau die Fragen sind mir beim Handbuch auch gekommen 🤣

          Hoffe auch das die Profis da noch mal rüber schauen und ein bissl Licht ins Dunkel bringen...

          Grüße

          Hannes

          Kommentar


            #6
            Bin ich echt der erste der soetwas umsetzt bzw es versucht?
            Ich scheine ein echter Sonderfall geworden zu sein über Corona🤯
            Sorry dafür😆

            Kommentar


              #7
              Wende Dich doch direkt mal an foobar0815 oder an enertegus. Wenn die Funktion definitiv nicht macht, was sie soll (ich weiß es nicht), wäre es ja eigentlich ein Produktmangel. Die schlechte Beschreibung der Funktion im Handbuch ist zumindest ein Qualitätsmangel...

              Kommentar


                #8
                Hier noch ein paar Beispiele. So ganz klar wird mir das mit "f16 als ganze Zahl mit genauer Stringlänge" nicht, aber ich denke, Du meinst wohl z6 im Beispiel.
                Code:
                fZahl=3.14f16
                // z1= $3.1400$
                z1=stringformat(fZahl, 4, 1, 10, 4)
                // z2= $+00003.1400$
                z2=stringformat(fZahl, 4, 5, 10, 4)
                // z3= $+3.1400$
                z3=stringformat(fZahl, 4, 2, 10, 4)
                // z4= $+3$
                z4=stringformat(fZahl, 4, 2, 0, 0)
                // z5= $3$
                z5=stringformat(fZahl, 4, 1, 0, 0)
                // z6= $00003$
                z6=stringformat(fZahl, 4, 3, 5, 0)
                Zum Hintergrund: Die Strings werden mit der C-Funktion printf formatiert. Der Kollege hatte seinerzeit hier die man-page zur Dokumentation genutzt, das ist auch wirklich schwer zu lesen, vermutlich könnten wir da alleine 10 Seiten dokumentieren (vgl. http://userpage.fu-berlin.de/~ram/pu...ormatierung_de). Problematisch ist auch, dass nicht jede Konfiguration gültig ist und man das leicht überliest.

                Die obigen Beispiele nehmen wir mal ins Handbuch auf und ergänzen dass halt bei Bedarf.
                offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
                Enertex Produkte kaufen

                Kommentar


                  #9
                  HannesKannes: Mir fällt gerade ein, dass mehrere Leerzeichen hintereinander in HTML ja meist ignoriert werden. Vielleicht ist der Schuldige daher nicht der EibPC...

                  ggf. müsstest Du dann den Ausgabestring als HTML-Sequenz in eine rechtsbündige Tabelle packen. Das müsste im pbutton/button auch gehen. Schaut dann z.B. so aus:
                  Code:
                  strBeginTable@ = $<table style="border:1px solid black; border-collapse:collapse; [COLOR=#e74c3c]text-align:right;[/COLOR] font-size:1em; color:#FFFFFF"><tr><th style="border:1px solid black;">kWh</th><th style="border:1px solid black;">PV</th><th style="border:1px solid black;">Haus</th><th style="border:1px solid black;">Bezug</th><th style="border:1px solid black;">Eingespeist</th><tr>$
                  
                  und an anderer Stelle für die Zeile "Total":
                  
                  if change(Name_WhHaus) or change(Name_WhBezug) or change(Name_WhEinsp) then {
                  Name_WhPV = Name_WhEinsp + Name_WhHaus - Name_WhBezug;
                  strkWhPV@ = stringformat(convert(Name_WhPV,0f32)/1000f32,4,0,9,2);
                  strTotTable@ = $<tr><td style="border:1px solid black; text-align:left;">Total</td>$;
                  strTotTable@ = strTotTable@ + $<td style="border:1px solid black;">$ + strkWhPV@ + $</td>$;
                  strTotTable@ = strTotTable@ + $<td style="border:1px solid black;">$ + strkWhHaus@ + $</td>$;
                  strTotTable@ = strTotTable@ + $<td style="border:1px solid black;">$ + strkWhBezug@ + $</td>$;
                  strTotTable@ = strTotTable@ + $<td style="border:1px solid black;">$ + strkWhEinsp@ + $</td></tr>$;
                  } endif
                  Sieht dann so aus:
                  PV-Tabelle.jpg

                  Mit einer einzeiligen und -spaltigen Tabelle könntest Du es also hinbekommen. style="border:none", damit keine Umrandung. Zu HTML gibts ja viele Infos im Internet, da hab' ich mir auch alles zusammengesucht. Wie Du siehst - alles Rechtsbündig (Die Werte sind leider teilweise nicht richtig, da die Lingg und Jahnke Energiezähler einen beschissenen Überlauf erzeugen, den ich programmmäßig bisher nicht abgefangen habe.)

                  Kommentar


                    #10
                    Super die Beispiele, aber wie geht das Auffüllen mit Leerzeichen?

                    Abgesehen vom HTML Problem...
                    Zuletzt geändert von EPIX; 07.03.2022, 11:43.
                    EPIX
                    ...und möge der Saft mit euch sein...
                    Getippt von meinen Zeigefingern auf einer QWERTZ Tastatur

                    Kommentar


                      #11
                      Zitat von klaus_kraemer Beitrag anzeigen
                      strBeginTable@ = $<table style="border:1px solid black; border-collapse:collapse; [COLOR=#e74c3c]text-align:right;.........
                      Hier wird für die ganze Table die Rechtsbündigkeit festgelegt. Dann brauchts keine Leerzeichen mehr...
                      Zuletzt geändert von klaus_kraemer; 07.03.2022, 12:42.

                      Kommentar


                        #12
                        Der Code am Anfang passt schon, das Problem bei der Darstellung im Button ist wie Klaus geschrieben hat das Zusammenfassen von Leerzeichen durch den Browser.

                        Alternative zur Tabelle bei HTML-Darstellung (ungetestet):

                        Code:
                        zStr=$&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$+stringformat(...)
                        
                        split(size(zStr) - 4,END )
                        Zu den weiteren Fragen:

                        Zitat von klaus_kraemer
                        Nullen UND Leerzeichen?
                        Code:
                         003
                        -003
                        statt
                        Code:
                        +003
                        -003

                        Zitat von klaus_kraemer
                        Steht da "s.u." für Suche umsonst?
                        steht weiter unten:

                        knx.png

                        Der Unterschied ist, genau wie das Handbuch sagt (Anführungszeichen zum Verdeutlichen, was generiert wird):


                        Code:
                        Leerzeichen bei positiver Zahl
                        $"$+stringformat(convert(3.0f32,0f16), 4, 1, 4, 0)+$"$ -> " 3"
                        
                        Auffüllen mit Nullen und Leerzeichen + Bei einer Umwandlung in Fließkomma- oder Exponentialdarstellung enthält die Ausgabe
                        ein Dezimalzeichen, auch falls diesem keine Ziffern folgen.
                        $"$+stringformat(convert(3.0f32,0f16), 4, 13, 4, 0)+$"$ -> " 03."
                        $"$+stringformat(convert(-3.0f32,0f16), 4, 13, 4, 0)+$"$ -> "-03."
                        
                        Auffüllen mit Nullen und Vorzeichen + Bei einer Umwandlung in Fließkomma- oder Exponentialdarstellung enthält die Ausgabe
                        ein Dezimalzeichen, auch falls diesem keine Ziffern folgen.
                        $"$+stringformat(convert(3.0f32,0f16), 4, 14, 4, 0)+$"$ -> "+03."
                        $"$+stringformat(convert(-3.0f32,0f16), 4, 14, 4, 0)+$"$ -> "-03."

                        Kommentar


                          #13
                          Auch nicht unelegant, die Lösung mit den &nbsp! Die hatte ich schon längst wieder vergessen...

                          Vielleicht erzeugt das auch kein "Positionsspringen" des Ausgabewerts - wäre spannend und wesentlich einfacher als der Weg über eine Fake-Tabelle.

                          Und bitte gebt die Beispiele ins Handbuch - sie sagen viel mehr, als die Beschreibung im Kopfkino auslöst.
                          Zuletzt geändert von klaus_kraemer; 07.03.2022, 14:54.

                          Kommentar


                            #14
                            Hallo zusammen,
                            vielen Dank für die zahlreichen Ideen.
                            folgendes funktioniert leider nicht:
                            Zitat von foobar0815 Beitrag anzeigen
                            split(size(zStr) - 4,END )
                            Hier ist auch nicht das fehlende Argument im Split schuld...
                            Da man klar im Editor das InnerHTML maskieren kann wäre das ein Weg aber alles andere als sauber und erst recht aufwendig(von der Übersichtlichkeit mal ganz abgesehen da man ja nicht beliebig die Zeilenumbrüche setzen kann und die Anzeige die Argumente etc nicht wirklich unterscheidet)
                            Auf die Klasse selber scheint man ja leider nicht direkt zugreifen zu können.Die Eigenschaft White-space pre würde dort schon einmal die gewünschte Formatierung (die laut Code ja umgesetzt werden sollte) über den Browser hinweg korrekt darstellen...

                            Ich weiß das Kunden diesen Programmierauswand nicht bezahlen mögen.Somit noch kein Produkt das ich da aktiv Promoten werde.

                            In einigen Einträgen ist ja angemerkt das die Visu überarbeitet werden soll.
                            Ist da etwas dran oder hab ich das falsch verstanden?

                            Kommentar


                              #15
                              Zitat von klaus_kraemer Beitrag anzeigen
                              HannesKannes:
                              Code:
                              strBeginTable@ = $<table style="border:1px solid black; border-collapse:collapse; [COLOR=#e74c3c]text-align:right;[/COLOR] font-size:1em; color:#FFFFFF"><tr><th style="border:1px solid black;">kWh</th><th style="border:1px solid black;">PV</th><th style="border:1px solid black;">Haus</th><th style="border:1px solid black;">Bezug</th><th style="border:1px solid black;">Eingespeist</th><tr>$
                              
                              und an anderer Stelle für die Zeile "Total":
                              
                              if change(Name_WhHaus) or change(Name_WhBezug) or change(Name_WhEinsp) then {
                              Name_WhPV = Name_WhEinsp + Name_WhHaus - Name_WhBezug;
                              strkWhPV@ = stringformat(convert(Name_WhPV,0f32)/1000f32,4,0,9,2);
                              strTotTable@ = $<tr><td style="border:1px solid black; text-align:left;">Total</td>$;
                              strTotTable@ = strTotTable@ + $<td style="border:1px solid black;">$ + strkWhPV@ + $</td>$;
                              strTotTable@ = strTotTable@ + $<td style="border:1px solid black;">$ + strkWhHaus@ + $</td>$;
                              strTotTable@ = strTotTable@ + $<td style="border:1px solid black;">$ + strkWhBezug@ + $</td>$;
                              strTotTable@ = strTotTable@ + $<td style="border:1px solid black;">$ + strkWhEinsp@ + $</td></tr>$;
                              } endif
                              )[/I]
                              Sieht ja richtig schick aus, was du da in Tabellenform gebastelt hast. Ich wollte auch schonmal meinen Energieverbrauch in eine Art Tabelle schmeißen.
                              @Klaus-kraemer
                              Würdest du dafür deinen ganzen Code oder ggfs. sogar Makro zur Verfügung stellen?
                              MfG MrKnx

                              Kommentar

                              Lädt...
                              X