Seite 1 von 1
String bestimmte Werte rausfiltern?
Verfasst: Sonntag 7. März 2010, 20:07
von Sonne23
Hallo
ich bin noch anfänger und bruchte hilfe.
ich möchte sehr gerne einen String auswerten, indem ich einfach vorgebe, welcher Wert (Byte weise) gewählt werden soll. Zum Beispiel
Code: Alles auswählen
String = "AA55890012"
Auswahl = 1 # wähle 1. Byte
Gewählt = String[Auswahl-1]+String[Auswahl] # soweit klappts,aber bei
String = "AA55890012"
Auswahl = 2 # wähle 2. Byte
Gewählt = String[Auswahl-1]+String[Auswahl]
#aber wen ich nun das 2. byte oder 3. byte wähle, kriege ich probleme,
Falsche ausgabe !!! :(
Wie kann ich es variabel halten, ohne den Index ständig per hand zu ändern?
gruss
Verfasst: Sonntag 7. März 2010, 20:13
von Hyperion
Ich verstehe nur Bahnhof! Beschreibe doch mal bitte genau, was "auswählen" bedeutet und was dann mit dem Original-String passieren soll.
Verfasst: Sonntag 7. März 2010, 20:16
von Sonne23
Hallo
also ich möchte folgendes realisieren:
Code: Alles auswählen
String = "AA55890012"
Auswahl = 1 # wähle 1. Byte
Output -> "AA"
Auswahl = 2
Output -> "55"
Auswahl = 4
Output -> "00"
eigentlich eine einfache funktion..
gruss
Verfasst: Sonntag 7. März 2010, 20:19
von Hyperion
Kapiere ich immer noch nicht? Was soll denn ausgegeben werden? Woran orintiert sich z.B. in Deinem Beispiel die "Ausgabe=4"? Ich kapiere den Zusammenhang überhaupt nicht...
Verfasst: Sonntag 7. März 2010, 20:22
von derdon
So?
Code: Alles auswählen
>>> import re
>>> String = "AA55890012"
>>> re.findall(r'\w{2}', String)
['AA', '55', '89', '00', '12']
Verfasst: Sonntag 7. März 2010, 20:23
von Sonne23
String ist zb ein Frame bestehend aus Bytes, zb "FFAAFFFF".
Nun möchte ich das erste Byte ("FF") haben. Oder das zweite Byte ("AA"). usw..
mehr will ich nicht machen

Verfasst: Sonntag 7. März 2010, 20:27
von Sonne23
lol drücke ich mich echt so lausig aus
derdon, ich möchte nicht alle elemente auswählen, sondern nur bestimmte, die ich über Auswahl vorgebe.zm beispiel
möchte ich das 3. Byte haben. Das dritte byte wäre "89". oder das 4. byte, was "00" wäre...
Verfasst: Sonntag 7. März 2010, 20:27
von Defnull
Sonne23 hat geschrieben:
Code: Alles auswählen
String = "AA55890012"
Auswahl = 1 # wähle 1. Byte
Output -> "AA"
Warum sind deine
Bytes zwei byte lang?
Verfasst: Sonntag 7. März 2010, 20:31
von Sonne23
Wieso 2 Byte?
Jedes einzelne Zeichen ist ein Nibble ! Zwei Zeichen ein Byte
Super, genau das meinte ich. auf diese funktion bin ich nicht gekommen

Verfasst: Sonntag 7. März 2010, 20:32
von Hyperion
Sonne23 hat geschrieben:lol drücke ich mich echt so lausig aus
Jap
derdon, ich möchte nicht alle elemente auswählen, sondern nur bestimmte, die ich über Auswahl vorgebe.zm beispiel
möchte ich das 3. Byte haben. Das dritte byte wäre "89". oder das 4. byte, was "00" wäre...
Ach Herrje, dann kapsel doch den Vorschlag in eine Funktion:
Code: Alles auswählen
def get_byte(code, pos):
bytes = re.findall(r'\w{2}', code)
return bytes[pos]
Wobei ich ich RegExps hier als overkill empfinde und auch eher Defnulls Vorschlag kapseln würde.
Verfasst: Sonntag 7. März 2010, 20:34
von Hyperion
Sonne23 hat geschrieben:Wieso 2 Byte?
Jedes einzelne Zeichen ist ein Nibble ! Zwei Zeichen ein Byte
Und das hättest Du einfach mal beschreiben sollen
z.B.:
"Ich habe einen String, in dem Hex-Werte stehen und möchte nun eine Funtkion realisieren, die mir das Hex-Zeichen an einem bestimmten Index der Hex-Werte zurückliefert"
Verfasst: Sonntag 7. März 2010, 20:36
von Sonne23
haha ja hast absolut recht.
mich deutlch ausdrücken hatte ih schon immer und wird mir auch öfter vorgeworfen
danke euch !!
Verfasst: Montag 8. März 2010, 13:22
von lunar
Sonne23 hat geschrieben:Wieso 2 Byte?
Ein Zeichen ist ein Byte lang. Bei einer Hexadezimaldarstellung ist die Darstellung eines Bytes eben zwei Byte lang. Insofern ist die hexadezimale Darstellung eigentlich eine ziemlich unsinnige Wahl.
Sinnvoller wäre es, ein Byte auch tatsächlich als Byte darzustellen. Dann wäre auch die Problemlösung zur "Auswahl eines Bytes" viel einfacher.