Neuen String aus String erstellen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
christofj
User
Beiträge: 13
Registriert: Montag 10. Dezember 2018, 11:04

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
__deets__
User
Beiträge: 14522
Registriert: Mittwoch 14. Oktober 2015, 14:29

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.
Sirius3
User
Beiträge: 17737
Registriert: Sonntag 21. Oktober 2012, 17:20

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?
christofj
User
Beiträge: 13
Registriert: Montag 10. Dezember 2018, 11:04

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:
__deets__
User
Beiträge: 14522
Registriert: Mittwoch 14. Oktober 2015, 14:29

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.
__deets__
User
Beiträge: 14522
Registriert: Mittwoch 14. Oktober 2015, 14:29

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?
Sirius3
User
Beiträge: 17737
Registriert: Sonntag 21. Oktober 2012, 17:20

@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.
Antworten