Ankündigung

Einklappen
Keine Ankündigung bisher.

- √ - Logikbaustein 12281_CSV-Split

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

    HS/FS - √ - Logikbaustein 12281_CSV-Split

    Ich hab nachdem ich gestern das Problem bei dem Unwetterbaustein gesehen haben den Text anschließend Zeilenweise auszugeben, hab ich mir mal eine einfachere Art überlegt als das über XML-ListGenerator und XML2Text Bausteine zu machen.

    Hier der Direkte Weg.
    https://knx-user-forum.de/downloads.php?do=file&id=397
    Ein einfach Split Baustein um CSV oder aber auch Texte zu teilen.

    Um z.B. einen Text mit Zeilenumbruch zu spliten einfach Eingang 2: "\x0a" verwenden.

    Ausgang 9 kann verwendet werden um eine Kaskade zu einem weiteren split Baustein zu geben, dort wird der Rest des Eingangswertes welcher noch nicht getrennt wurde weitergegeben.
    Nils

    aktuelle Bausteine:
    BusAufsicht - ServiceCheck - Pushover - HS-Insight

    #2
    Hallo Nils,
    was soll ich sagen?
    Dein grinsendes Gesicht kann ich mir jedenfalls vorstellen wenn ich den simplen Quellcode anschaue und dennoch nicht verstehe.

    doch leider ist da noch was faul
    09.06.2011 10:55:39 (4)
    File "/hs/compile/hs_logik.py", line 250, in calc
    IndexError: list assignment index out of range
    [5012L, 12281L, 0L, 'EC[1] and len(EN[1]) ] 0 and len(SN[1])]0', 'EN[1].split(SN[1],8)', '', 0L, 0L, 2L, 0L]
    Danke für den Baustein!

    Kommentar


      #3
      Update ist im DL,

      war nur der Speicher nicht definiert, blöder Copy & Paste Fehler.

      5003|1|""|0
      5003|1|[]|0

      anstatt


      5003|1|""|0
      5003|2|[]|0
      Nils

      aktuelle Bausteine:
      BusAufsicht - ServiceCheck - Pushover - HS-Insight

      Kommentar


        #4
        Hast du an dem Baustein noch rumgebastelt? Die Zeile sieht im Original nämlich so aus:
        Code:
        "EC[1] and len(EN[1]) > 0 and len(SN[1])>0"|"EN[1].split(SN[1],8)"
        Code:
        'EC[1] and len(EN[1]) ] 0 and len(SN[1])]0', 'EN[1].split(SN[1],8)'
        Da fehlen irgendwie die Operatoren.
        Prüf das noch mal.
        Gruss aus Radevormwald
        Michel

        Kommentar


          #5
          er hat nur quote und nicht code genommen da hat der html parser zugeschlagen
          Nils

          aktuelle Bausteine:
          BusAufsicht - ServiceCheck - Pushover - HS-Insight

          Kommentar


            #6
            Zitat von woda Beitrag anzeigen
            wenn ich den simplen Quellcode anschaue und dennoch nicht verstehe.
            ok ich erklär mal anhand von CSV

            Eingang1: "1,2,3,4,5,6,7,8,9,10,11,12"
            Eingang2: ","

            Die erste Zeile parsed nur das Trennzeichen, wenn es eine Hex Angabe wie z.B. \x0a ist, die dann in '\n' geparst wird, weil ansonsten ein "\n" an Eingang 2 nämlich ein "\\n" wird.

            Die zweite Zeile macht jetzt nichts weiter als einen Split mit dem trennzeichen aus EN[2] dass wenn es Sonderzeichen enthiehlt diese nun geparsed in SN[1] hat.

            Dem split wird als 2. Parameter die maximalen splits angegeben (die Anzahl der Ausgänge).

            Dann wird ein einfacher "1,2,3,4,5,6,7,8,9,10,11,12".split(",",8) zu ["1","2","3","4","5","6","7","8","9,10,11,12"]. wie du siehst enthält jetzt SN[2][8] den Rest "9,10,11,12" der an einen weiteren Baustein weiter gereicht wird.

            der Rest der Logik ist nichts weiter als zu überprüfen ob die Länge von SN[2] (["1","2","3","4","5","6","7","8","9,10,11,12"]) größer als der jeweilige Ausgang ist, denn der nächste Baustein würde ja nach dem "9,10,11,12".split(",",8) nur (["9","10","11","12"]) die Länge 4 haben.
            Nils

            aktuelle Bausteine:
            BusAufsicht - ServiceCheck - Pushover - HS-Insight

            Kommentar


              #7
              Jetzt funktioniert der Baustein fast perfekt

              Einziges Problem, die alten Inhalte an den Ausgängen und den kaskadierten Bausteinen bleiben bei kürzeren Eingangstexten stehen.
              Mit dem Text trennen Baustein wurden sie gelöscht.

              Kommentar


                #8
                Zitat von woda Beitrag anzeigen
                Einziges Problem, die alten Inhalte an den Ausgängen und den kaskadierten Bausteinen bleiben bei kürzeren Eingangstexten stehen.
                Mit dem Text trennen Baustein wurden sie gelöscht.
                ok Update V1.2
                Nils

                aktuelle Bausteine:
                BusAufsicht - ServiceCheck - Pushover - HS-Insight

                Kommentar


                  #9
                  Zitat von NilsS Beitrag anzeigen
                  ok Update V1.2
                  Wenn du schon geladen hattest, nochmal laden.. war noch ein kleiner Fehler drin und ich hatte kein Bock die Version nochmal hochzuschieben
                  Nils

                  aktuelle Bausteine:
                  BusAufsicht - ServiceCheck - Pushover - HS-Insight

                  Kommentar


                    #10
                    Ich bin fassungslos über dein Tempo,
                    der HS braucht jedenfalls länger zum booten als du Updates lieferst.

                    Es läuft!!!

                    Kommentar


                      #11
                      Danke für die Erklärung,
                      aus deinem letzten Update hab ich was für den Musikpal Baustein gelernt!

                      Kommentar


                        #12
                        Bugfix: Kaskade funktionierte nicht

                        https://knx-user-forum.de/downloads.php?do=file&id=397
                        Nils

                        aktuelle Bausteine:
                        BusAufsicht - ServiceCheck - Pushover - HS-Insight

                        Kommentar


                          #13
                          Hallo Nils,

                          was heißt denn das?

                          LookupError: unknown encoding: string-escape
                          [5012L, 12281L, 0L, 'EC[1] and len(EN[1]) ] 0', "EN[1].split(EN[2].decode('string-escape'),8)", '', 0L, 0L, 1L, 0L]
                          Gruß Matthias
                          EIB übersetzt meine Frau mit "Ehepaar Ist Beschäftigt"
                          - PN nur für PERSÖNLICHES!

                          Kommentar


                            #14
                            Etwas gegoogelt und das gefunden. Ist das die Lösung?


                            You'll have to use unicode_escape instead:
                            >>> b"\\123omething special".decode('unicode_escape') If you start with a str object instead (equivalent to the python 2.7 unicode) you'll need to encode to bytes first, then decode with unicode_escape.
                            If you need bytes as end result, you'll have to encode again to a suitable encoding (.encode('latin1') for example, if you need to preserve literal byte values; the first 255 unicode code points map 1-on-1).
                            Your example is actually UTF-16 data with escapes. Decode from unicode_escape, back to latin1 to preserve the bytes, then from utf-16-le (UTF 16 little endian without BOM):
                            >>> value = b's\\000u\\000p\\000p\\000o\\000r\\000t\\000@\\000 p\\000s\\000i\\000l\\000o\\000c\\000.\\000c\\000o\ \000m\\000' >>> value.decode('unicode_escape').encode('latin1') # convert to bytes b's\x00u\x00p\x00p\x00o\x00r\x00t\x00@\x00p\x00s\x 00i\x00l\x00o\x00c\x00.\x00c\x00o\x00m\x00' >>> _.decode('utf-16-le') # decode from UTF-16-LE
                            Gruß Matthias
                            EIB übersetzt meine Frau mit "Ehepaar Ist Beschäftigt"
                            - PN nur für PERSÖNLICHES!

                            Kommentar

                            Lädt...
                            X