Zwei Versionen (Strings) 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
unix
User
Beiträge: 16
Registriert: Dienstag 20. Januar 2009, 16:22

Dienstag 7. April 2009, 06:17

Hallo,
ich würde gerne folgendes realisieren, weiß allerdings nicht genau, wie ich zu dem gewünschten Ergebnis komme:

Über die Windows-Konsole werden mir zwei Versionsnummern als String ausgegeben:
Programmversion: 12.99 (Build 2)
13.01.0003
Momentan vergleiche ich nur auf die eigentliche Version, nicht aber das Build:

Code: Alles auswählen

temp1 = line[17:22]
temp2 = self.gewollteversion[0:5]
if temp1 == temp2:
     mach was
Ich vergleiche also, ob 12.99 mit 13.01 übereinstimmt.
Nun würde ich dies aber gerne abändern, sodass auch das Build mit überprüft wird.

12.99 (Build 2) ist gleichzusetzen mit 12.99.0002, wobei der Build aber auch zweistellig sein kann, beispielsweise 12.99 (Build 33) -> 12.99.0033

Die erste Ausgabe (Programmversion: 12.99 (Build 2)) soll also in einer Variable so umgeändert werden, dass sie gleich aufgebaut ist, wie Ausgabe zwei (12.99.0002).

Mein momentander Gedanke ist, die Zeile einzulesen, nach Build zu suchen, die erste Zahl danach einzulesen und schauen, ob eine weitere folgt oder nicht. Wenn nein, dass fülle mit 3x0, ansonsten lies auch die nächste Zahl ein und fülle mit 2x0 auf. Was dann rauskommt beispielsweise in temp3 schreiben und mit temp2 vergleichen.

Leider komme ich momentan selbst nicht auf die Lösung, deshalb würde ich mich über Hilfe sehr freuen.
Grüße,
BlackJack

Dienstag 7. April 2009, 07:21

Also ich würde nicht versuchen das in die gleiche Zeichenkettenform zu bringen, sondern aus beiden ein Tupel mit Zahlen zu machen und die Tupel dann vergleichen. Vorteil: Man kann nicht nur auf Gleichheit testen, sondern auch feststellen welches neuer/älter ist.

Für den ersten Fall bietet sich das `re`-Modul an, beim zweiten kommt man mit `str.split()`, `map()`, und `int()` ans Ziel.
unix
User
Beiträge: 16
Registriert: Dienstag 20. Januar 2009, 16:22

Dienstag 7. April 2009, 07:42

Falls es nicht zuviel Umstände bereitet, könntest du das bitte weiter ausführen? Habe seit Erstellung des Threads weiter an der Lösung arbeiten probiert, habe allerding nicht wirklich einen Fortschritt erreicht.
Würde mich wirklich sehr d'rüber freuen ;)
Nergal
User
Beiträge: 72
Registriert: Montag 6. Oktober 2008, 14:02

Dienstag 7. April 2009, 09:12

Was BlackJack meint ist, daß du aus beiden Strings eine Liste machen kannst, in der die drei Werte gespeichert werden, um sie dann zu vergleichen.

Code: Alles auswählen

>>> map(int, "13.01.0003".split("."))
[13, 1, 3]

Code: Alles auswählen

re.findall("\d*", 'Programmversion: 12.99 (Build 2)')
['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '12', '', '99', '', '', '', '', '', '', '', '', '2', '', '']
Bei dem regulären Ausdruck kann man sich evtl. noch was einfallen lassen, damit man die leeren Einträge nicht "von Hand" löschen muss. Außerdem sind die Zahlen da noch Strings.
Zuletzt geändert von Nergal am Dienstag 7. April 2009, 09:17, insgesamt 1-mal geändert.
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Dienstag 7. April 2009, 09:16

Nergal hat geschrieben:Bei dem regulären Ausdruck kann man sich evtl. noch was einfallen lassen, damit man die leeren Einträge nicht "von Hand" löschen muss.
Sicherlich hilft da die Wahl des richtigen Quantifikators:

Code: Alles auswählen

re.findall(r'\d+', 'Programmversion: 12.99 (Build 2)')
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Antworten