binäre Zahlenfolge schnell vergleichen

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
blablabla
User
Beiträge: 6
Registriert: Freitag 7. Oktober 2011, 16:50

Mittwoch 29. Februar 2012, 16:42

Hallo,

Ich habe gerade ein Problem wo ich leider nicht weiß, wie ich das am besten mit Python umsetzen kann bzw. soll

ich habe eine beliebige Zahlenfolge zB "010010" jede einzelne Ziffer kommt aus einer Datei datei1 = 0; datei2 = 1; datei3=0; datei4=0...
Bei einer Änderung dieser Zahlenfolge muss ich den Inhalt speichern.

Beispiel:
Zahlenfolge 1 = "010010"
Zahlenfolge 2 = "010010"
Zahlenfolge 3 = "010011" -> Folge muss in Datei gespeichert werden, und ich müsste explizit wissen welcher Bit sich verändert hat

in C würd ich das ganze so machen indem ich zahlenfolge-new - zahlenfolge-last wenn das 0 ist brauch ich nichts machen, wenn größer als 0 würde ich einer Schleife bitweise vergleichen.

Nur bin ich leider nicht so fit in Python und weiß nicht welcher Lösungsansatz in Python der richtige ist, soll ich die Zahlen in eine Liste bzw. Tuple vergleichen oder wie würdet ihr vorgehen?

Die Verarbeitung sollte schnell sein, da die neuen Werte in <1 Sekunde kommen.

Danke für eure Hilfe
BlackJack

Mittwoch 29. Februar 2012, 16:57

@blablabla: IMHO ist die Problembeschreibung nicht ausführlich/genau genug. Da sind zu viele Interpretationsmöglichkeiten. Mal sprichst Du von Zahlenfolgen, mal von Bits. Um wie viele Dateien geht es? Was genau steht da drin? Binärdaten? 0 oder 1 als ASCII-Ziffern? Wie soll die Ausgabe aussehen/passieren? Binärwerte? ASCII-Ziffern? Wie sollen die Änderungen ausgegeben werden? Was ist, wenn sich mehr als eine Stelle verändert hat? Was ist das *eigentliche* Problem was gelöst werden soll?
blablabla
User
Beiträge: 6
Registriert: Freitag 7. Oktober 2011, 16:50

Mittwoch 29. Februar 2012, 20:01

Vielen Dank für die schnelle Antwort und tut mir Leid ich es nicht ausführlich beschrieben habe

Also zum Problem:

Es geht dabei um Digitale Eingänge (Microcontroller) diese schreiben eine 1 bzw. 0 in eine Datei. Allerdings gibt es nicht nur 1 digitalen Eingang sondern min. 8

mit python ruf ich die Datei so ab:

Code: Alles auswählen

wert = open("folder-datei/ain","rb").read();
print wert gibt mir dann entweder 0 oder 1 aus.

Diese Eingänge sollen alle im 0.5 Sekunden-Takt abgefragt werden. Da ich allerdings nicht alle Daten abspeichern möchte (wegen zu großer Datenmenge) würde ich gerne nur Daten speichern wo es eine Änderung gibt (Die Daten werden dann als csv abgespeichert).
Zusätzlich soll wenn es eine Änderung gibt noch eine Meldung ausgegeben werden "Digital Input 1 is now high or low".
Wenn sich aufeinmal mehrere Eingänge ändern soll man die Werte nur einmal in die csv speichern allerdings soll eine Ausgabe erscheinen "Digital Input 1 is high\n Digital Input 2 is high"

Mein Problem bzw. Denkblockade ist zurzeit nur wie ich diese 8 Pins aufeinmal abfrage bzw. vergleiche ohne das ich jeden Pin einzeln vergleichen muss.
BlackJack

Mittwoch 29. Februar 2012, 20:21

@blablabla: Gibt es da eine Datei pro Pin?

Wenn dem so ist, dann hast Du mehrere Werte zum Beispiel in einer Liste oder einem Tupel. Ob die gleich den vorher gelesenen sind, lässt sich einfach durch einen Test auf Gleichheit feststellen. Wenn sie ungleich sind, dann musst Du um die Positionen der Unterschiede heraus zu finden alle Paare (alt, neu) einzeln betrachten. Wobei man das auch *grundsätzlich* machen könnte, denn so spart man sich den doppelten Vergleich. Einfach eine Liste mit den Unterschieden zwischen alt und neu erstellen und wenn die nicht leer ist, dann muss man den Wert schreiben und Text ausgeben.
Antworten