Seite 1 von 1

Wunsch: Funktion zum Vergleich von Versionsnummern

Verfasst: 28 Jan 2010, 15:31
von embl-structures
Der Vergleich von Versionsnummern (2.4.5, 7.8B3, 1.2_c, 9.0.1 (DE), etc.) ist sehr muehsam und fehleranfaellig. Es waere sehr praktisch, wenn solche Funktionen direkt in wInst zur Verfuegung stehen wuerden.

Gruss
frank

Re: Wunsch: Funktion zum Vergleich von Versionsnummern

Verfasst: 28 Jan 2010, 21:00
von r.roeder
Hallo,

was wäre denn der Algorithmus für einen
Vergleich von Versionsnummern (2.4.5, 7.8B3, 1.2_c, 9.0.1 (DE), etc.)
Der winst kann das in der Funktion requiredWinstVersion für seine eigene Versionsnummer - aber da ist bekannt, wie sie aufgebaut ist. Im Prinzip werden String-Vergleich für jeden der durch Punkt getrennten Abschnitte durchgeführt. Ist das ein allgemeintaugliches Verfahren?

Gruß,

Rupert Röder

Re: Wunsch: Funktion zum Vergleich von Versionsnummern

Verfasst: 28 Jan 2010, 21:58
von embl-structures
r.roeder hat geschrieben:was wäre denn der Algorithmus für einen
Vergleich von Versionsnummern (2.4.5, 7.8B3, 1.2_c, 9.0.1 (DE), etc.)
Im Detail hatte ich mir das noch nicht ueberlegt. Sicher ist 2.5.5>2.4.5>2.4.3. Aber das scheint wInst wie Sie schreiben, bereits in dieser Art zu handhaben. Komplexere Versionsnummern werden auch von den Entwicklern nicht immer gleich behandelt. Mal ist 1.2b>1.2, mal 1.2b<1.2....Vielleicht war der Vorschlag doch zu unausgegoren (entstanden beim Schreiben eines wInst-Skriptes). Ich denke, mit dem Standard-Stringvergleich von wInst kann ich erst mal leben.

frank

Re: Wunsch: Funktion zum Vergleich von Versionsnummern

Verfasst: 01 Feb 2010, 19:29
von embl-structures
Ich mache in diesem Thread weiter obwohl es jetzt eigentlich besser ins Support-Forum passen wuerde...
r.roeder hat geschrieben:Im Prinzip werden String-Vergleich für jeden der durch Punkt getrennten Abschnitte durchgeführt. Ist das ein allgemeintaugliches Verfahren?
Ich hatte verstanden, dass das in der aktuellen Implementation der Fall sei. Dass ich also "8.2.0" und "8.2.1" vergleich kann und das korrekte Resultat erhalte. Bei folgendem Code laeuft das Skript aber jedes Mal (!) durch den ersten if-Teil und nie durch den "else"-Teil:

Code: Alles auswählen

[Aktionen]
defvar $v1
defvar $v2

set $v1 = "8.2.0"
set $v2 = "8.2.1"
if ("$v1" < "$v2")
  pause $v1 + " ist kleiner als " + $v2
else
  pause $v2 + " ist kleiner als " + $v1
endif

set $v1 = "8.2.1"
set $v2 = "8.2.0"
if ("$v1" < "$v2")
  pause $v1 + " ist kleiner als " + $v2
else
  pause $v2 + " ist kleiner als " + $v1
endif
Einmal ist also 8.2.1<8.2.0 und dann ist 8.2.0<8.2.1... Was laeuft hier schief?

frank

Re: Wunsch: Funktion zum Vergleich von Versionsnummern

Verfasst: 03 Feb 2010, 14:06
von embl-structures
Ich habe die Anfrage in Thread viewtopic.php?f=7&t=1223 verlagert
frank

Re: Wunsch: Funktion zum Vergleich von Versionsnummern

Verfasst: 12 Okt 2010, 16:16
von embl-structures
r.roeder hat geschrieben:Hallo,
was wäre denn der Algorithmus für einen
Vergleich von Versionsnummern (2.4.5, 7.8B3, 1.2_c, 9.0.1 (DE), etc.)
Der winst kann das in der Funktion requiredWinstVersion für seine eigene Versionsnummer - aber da ist bekannt, wie sie aufgebaut ist. Im Prinzip werden String-Vergleich für jeden der durch Punkt getrennten Abschnitte durchgeführt. Ist das ein allgemeintaugliches Verfahren?
Gruß,
Rupert Röder
Ich komme nochmals auf diese Thread zurueck: Fuer WInst (v 4.10.8.0) scheint 3.6.9 >= 3.6.10 zu gelten. Deswegen ist der Stringvergleich wie er in WInst implementiert ist fuer meine Zwecke nicht brauchbar, weil er nur so lange funktioniert, wie die Terme zwischen den Punkten Einziffrig sind.

Ich reduziere die Anfrage also auf Versionsnummern vom Typ "Gruppen von durch Punkten getrennten Ziffern". Wie kann ich solche Versionsnummern vergleichen?

Gruss

frank

Re: Wunsch: Funktion zum Vergleich von Versionsnummern

Verfasst: 12 Okt 2010, 16:34
von j.schneider
Es gibt die Funktion CompareDotSeparatedStrings.

Code: Alles auswählen

if (CompareDotSeparatedStrings("3.6.9", "3.6.10") = 1)

Re: Wunsch: Funktion zum Vergleich von Versionsnummern

Verfasst: 12 Okt 2010, 17:24
von embl-structures
j.schneider hat geschrieben:Es gibt die Funktion CompareDotSeparatedStrings.

Code: Alles auswählen

if (CompareDotSeparatedStrings("3.6.9", "3.6.10") = 1)
Super! Offenbar ist die Version meines WInst-Handbuches deutlich aelter (version 4.9.0) als meine WInst-Version ;-)

frank