Seite 1 von 1

Vergleich von Strings der Art "1.2.3.4"?

Verfasst: 03 Feb 2010, 14:05
von embl-structures
In Thread viewtopic.php?f=5&t=1202 schreibt Ruper Roeder
r.roeder hat geschrieben:Im Prinzip werden String-Vergleich für jeden der durch Punkt getrennten Abschnitte durchgeführt.
Wenn ich aber z.B. mit folgendem Code diverse Versionsnummern vergleiche, lande ich immer im Teil "$v1 >= $version"

Code: Alles auswählen

[Aktionen]
defstringlist @versionen
set @versionen = CreateStringList ("8.0.0", "8.1.0", "8.1.1", "8.1.2", "8.2.0")

defvar $version
set $version = "8.1.1.2006122344"

for $v1 in @versionen do sub_CompareVersions

[sub_CompareVersions]
if ("$v1" < "$version")
  Pause "$v1 < "+$version
else
  Pause "$v1 >= "+$version
endif
Wenn ich hingegen im if-Statement die Abfrage umkehre ("<" durch ">" ersetzen), lande ich immer im zweiten Teil des if-Statements.

Mache ich etwas falsch oder funktionieren die String-Vergleiche doch nicht wie beschrieben?

frank

Re: Vergleich von Strings der Art "1.2.3.4"?

Verfasst: 03 Feb 2010, 15:23
von r.roeder
Hi,

immer dieser Ärger mit den Quotations:

Code: Alles auswählen

"$v1" < "$version"
stellt natürlich nur fest, das "1" vor "e" liegt und deshalb "$v1" auch vor "$ve...".

Grüße,

Rupert Röder

Re: Vergleich von Strings der Art "1.2.3.4"?

Verfasst: 03 Feb 2010, 16:09
von embl-structures
r.roeder hat geschrieben:

Code: Alles auswählen

"$v1" < "$version"
stellt natürlich nur fest, das "1" vor "e" liegt und deshalb "$v1" auch vor "$ve...".
OK, ok. Nach nochmaliger gruendlicher Ueberlegung wuerde ich allerdings sagen, dass beim ersten Zeichen festgestellt wird, dass "8" (Ersetzung der Laufvariable) vor "$" (woertlicher String) liegt. Was wohl auch stimmt ;-). Folgender korrigierter Code funktioniert:

Code: Alles auswählen

[Aktionen]
defstringlist @versionen
set @versionen = CreateStringList ("8.0.0", "8.1.0", "8.1.1", "8.1.2", "8.2.0")

defvar $version
set $version = "8.1.1.2006122344"


for $v1 in @versionen do sub_CompareVersions

[sub_CompareVersions]
; Quotes fuer Laufvariablen, aber KEINE fuer "normale" Variablen
if ("$v1" > $version)
  Pause "$v1 > "+$version
else
  Pause "$v1 <= "+$version
endif
Habe ich nicht in schon in Thread viewtopic.php?f=6&t=1213 geschrieben, das diese verschiedene Behandlung von Variablen etwas verwirrend (und fehleranfaellig) ist? Waere es nicht einfacher, man wuerde regulaere Variablen als Laufvariablen verwenden, die dann ganz "normal" benutzt werden koennen?

Gruss
frank