String bestimmte Werte rausfiltern?

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
Sonne23
User
Beiträge: 12
Registriert: Sonntag 7. März 2010, 20:00

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
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Ich verstehe nur Bahnhof! Beschreibe doch mal bitte genau, was "auswählen" bedeutet und was dann mit dem Original-String passieren soll.
Sonne23
User
Beiträge: 12
Registriert: Sonntag 7. März 2010, 20:00

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
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

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...
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

So?

Code: Alles auswählen

>>> import re
>>> String = "AA55890012"
>>> re.findall(r'\w{2}', String)
['AA', '55', '89', '00', '12']
Sonne23
User
Beiträge: 12
Registriert: Sonntag 7. März 2010, 20:00

:D

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 ;)
Sonne23
User
Beiträge: 12
Registriert: Sonntag 7. März 2010, 20:00

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...
Benutzeravatar
Defnull
User
Beiträge: 778
Registriert: Donnerstag 18. Juni 2009, 22:09
Wohnort: Göttingen
Kontaktdaten:

Sonne23 hat geschrieben:

Code: Alles auswählen

String = "AA55890012"
Auswahl = 1 # wähle 1. Byte
Output -> "AA"
Warum sind deine Bytes zwei byte lang?

Code: Alles auswählen

>>> i=2
>>> s = "AaBbCcDd"
>>> s[(i-1)*2:i*2]
'Bb'
Bottle: Micro Web Framework + Development Blog
Sonne23
User
Beiträge: 12
Registriert: Sonntag 7. März 2010, 20:00

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 :(
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Sonne23 hat geschrieben:lol drücke ich mich echt so lausig aus :(
Jap :-D
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.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

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"
Sonne23
User
Beiträge: 12
Registriert: Sonntag 7. März 2010, 20:00

haha ja hast absolut recht. :)
mich deutlch ausdrücken hatte ih schon immer und wird mir auch öfter vorgeworfen :(

danke euch !!
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.
Antworten