Seite 1 von 1

Neuen String aus String erstellen

Verfasst: Montag 10. Dezember 2018, 11:39
von christofj
Hallo zusammen,

ich bin neu hier und fange erst mit der Pythonprogrammiersprache an.

Folgende Problemstellung habe ich:

Ich habe einen String (msg.payload) der ab und zu aktualisiert wird, die Länge variiert. Bei diesem möchte ich bestimmte Zeichen auswerten und bis zu einem definierten Endezeichen die Zeichen in einem neuen String (measurement_point) speichern.

Hier mal was in so einem String drin steht: P:234/x:-23/P:235/ ...

Jetzt will ich alles nach dem 'P' bis zu dem '/' in einen neuen String schreiben. Funktioniert bei mir noch nicht.
In C/C++ würde ich das in ein char array schreiben.

Gibt es in python sowas wie ein char array? Wenn ja, wie muss das deklariert werden?

Hier noch mein Codeschnipsel.

Code: Alles auswählen

    length = len(msg.payload)
    while i < length:
        print(str(i))
        char = (chr(msg.payload[i]))
        if char == varP:
            while char != tchar:
                char = (chr(msg.payload[i]))
                if char != tchar:
                    measurement_point[j] = char
                    j = j + 1
                i = i + 1
            print(str(measurement_point))
            j = 0
        i = i + 1

Danke im Voraus

Re: Neuen String aus String erstellen

Verfasst: Montag 10. Dezember 2018, 11:45
von __deets__
Strenggenommen gibt es sowas wie ein string-array, aber das benutzt man so gut wie nie.

Ich bin mir nicht so ganz sicher, was du da oben genau haben willst, aber wenn du zB einfach die einzelnen P.../x.../P... isolieren willst, ist das ein simples

Code: Alles auswählen

parts = msg.payload.split("/")
Das war's.

Als Faustregel: wann immer du in Python mit Indizes und einzelnem Zugriff auf Zeichen rumroedelst, machst du in 99.9% aller Faelle etwas falsch.

Re: Neuen String aus String erstellen

Verfasst: Montag 10. Dezember 2018, 11:57
von Sirius3
In Python arbeitet man mit höheren Stringoperationen, wie z.B. `split`, oder regulären Ausdrücken: "P(\d+)/". Mit welchem Tutorial lernst Du Python und hast Du das Kapitel zu Stringoperationen schon durchgearbeitet?

Re: Neuen String aus String erstellen

Verfasst: Montag 10. Dezember 2018, 15:58
von christofj
Danke schon mal für die Hinweise.

Mit der split-Methode habe ich schon mal herumgefummelt. Nun ist es so, das sich der String verändert von einem Wert (P:1/x:23/) bis max 6000 Werte (P:6000/x:654/)
Als ich mit der split-Methode gearbeitet habe, hatte ich immer 3 Werte zu verarbeiten.

Code: Alles auswählen

Data1, Data2, Data3 = msg.payload.split("/")
Nun wo der String von 1 bis 6000 Werte haben kann sehe ich das Problem der "flexiblen" Variablendeklaration.
Hier bräuchte ich ja so was wie ein String-Array.

Am Ende will ich einzelnen Variablen haben.
Diese werden dann an verschiedene Tabellen einer Datenbank übergeben.
Sirius3 hat geschrieben: Montag 10. Dezember 2018, 11:57 Mit welchem Tutorial lernst Du Python und hast Du das Kapitel zu Stringoperationen schon durchgearbeitet?
Kein direktes Tutorial, alles mal so eben fix neben bei :oops: . Kann ja so schwer nicht sein, dachte ich :lol:

Re: Neuen String aus String erstellen

Verfasst: Montag 10. Dezember 2018, 16:06
von __deets__
Das ist doch eine Wahl, da explizites unpacking zu betreiben. Wenn du einfach

foo = string.split("trenner")

machst, dann ist foo eine Liste (arrays sind in Python unueblich. Wir benutzen Listen). Und da kannst du dann drueber iterieren.

Natuerlich schmeisst dir Python einen Fehler, wenn du mit

a, b, c = etwas_aufzaehlbares

einforderst, dass es halt genau 3 Element sein sollen.

Und einmal durch das Tutorial lesen kann nicht schaden, dann lernt man, welche Datentypen es so gibt.

Re: Neuen String aus String erstellen

Verfasst: Montag 10. Dezember 2018, 16:17
von __deets__
Und noch ein Nachtrag: bei 6000 Elementen in deiner Liste bin ich mir ziemlich sicher, dass du da genau keine "einzelnen Variablen haben" willst. Wie soll denn Code mit 6000 Variablen aussehen?

Re: Neuen String aus String erstellen

Verfasst: Montag 10. Dezember 2018, 16:46
von Sirius3
@christofj: in Python benutzt man keine Typisierten Arrays sondern einfach eine Liste. Du solltest dringend ein Python-Tutorial durcharbeiten (z.B. das in der offiziellen Dokumentation) um mit den Grundlagen von Python vertraut zu werden. Vieles macht man anders als mit plain C.