Autor Beitrag
Biarchiv
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 688



BeitragVerfasst: So 15.04.12 16:32 
Hallo,

gibt es in Delphi eine eingebaute Funktion wo ich von Versionswerten größer und kleiner sagen kann?

zb: if (1.4.66.2 > string) then
trm
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 491
Erhaltene Danke: 19

Windows 7x64
Delphi 7
BeitragVerfasst: So 15.04.12 17:02 
Mir fällt dazu spontan ein, dass die Version ja als String vorliegt. Somit kann man die Punkte rausnehmen, um einen gültigen Integer umrechnen zu können.

Damit da aber ein korrekter Vergleich erfolgen kann, sollte man den Versionsstring lieber splitten, um führende Nullen zu entfernen/hinzuzufügen.
Ansonsten kann das ganze nach Hinten (im wahresten Sinne) los gehen. Bsp: 1.5.003 wäre größer als 1.5.3, wenn man es als String umwandelt.

Per Splitting kann man die einzelnen Strings dann in Integer umwandeln, die Nullen werden automatisch entfernt. Als Sicherheit sollte man dann die einzelnen Integer wieder mit führenden Nullen in Strings umwandeln, zu einem einzigen String zusammenführen und das dann in einen Integer umwandeln.

Beispiel:

VersionA = "1.5.043"
VersionB = "1.6.3"

Split VersionA in Einzelstrings ->
Split_A[0] = "1"
Split_A[0] = "5"
Split_A[0] = "043"

Split VersionB in Einzelstrings ->
Split_A[0] = "1"
Split_A[0] = "6"
Split_A[0] = "3"

In einzelne Integer ->
Split_A[0] = 1
Split_A[0] = 5
Split_A[0] = 43

In einzelne Integer ->
Split_B[0] = 1
Split_B[0] = 6
Split_B[0] = 3

Hier könnte man die Version schon vergleichen, indem man die einzelnen Arrayelemente direkt vergleicht.

Einfacher geht es, wenn alles wieder zusammengefügt wird. Wenn man die Integer nun als String zusammenfassen würde, wäre VersionA größer als VersionB, da es mehr Stellen hat. Daher wieder Nullen hinzufügen.

In einzelne Strings formatieren mit führenden Nullen ->
Split_A[0] = "00001"
Split_A[0] = "00005"
Split_A[0] = "00043"

Split_B[0] = "00001"
Split_B[0] = "00006"
Split_B[0] = "00003"

Wieder zu einem String:
VersionA = "000010000500043"
VersionB = "000010000600003"

Und letztendlich zu einem Integer:
VersionA = 10000500043
VersionB = 10000600003

Das ganze erinnert ein wenig an Klöße kochen - von der rohen Kartoffel angefangen, ist aber in meinen Augen eine Lösung, welche funktioniert.


Edit: gerade nochmal gegoogelt.

www.delphipraxis.net...ern-vergleichen.html
www.delphipraxis.net...ben-vergleichen.html

Ich habe Buchstaben bei meinen Vergleichen nicht bedacht!

Nachtrag:

www.delphi-forum.de/...leichen_89919,0.html

_________________
In Erfurt gibt es eine Pension, in der es gemütlich ist, Google einfach nach Pension Fiege ;)