Seite 1 von 1

Zwei Versionen (Strings) vergleichen

Verfasst: Dienstag 7. April 2009, 06:17
von unix
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,

Verfasst: Dienstag 7. April 2009, 07:21
von BlackJack
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.

Verfasst: Dienstag 7. April 2009, 07:42
von unix
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 ;)

Verfasst: Dienstag 7. April 2009, 09:12
von Nergal
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.

Verfasst: Dienstag 7. April 2009, 09:16
von Leonidas
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)')