Vergleich von Strings der Art "1.2.3.4"?

Antworten
Benutzeravatar
embl-structures
Beiträge: 327
Registriert: 13 Jan 2010, 18:41
Wohnort: Heidelberg
Kontaktdaten:

Vergleich von Strings der Art "1.2.3.4"?

Beitrag 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
Benutzeravatar
r.roeder
uib-Team
Beiträge: 540
Registriert: 02 Jul 2008, 10:08

Re: Vergleich von Strings der Art "1.2.3.4"?

Beitrag 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
opsi support - uib gmbh
For productive opsi installations we recommend maintainance + support contracts which are the base of opsi development.


Wondering who's using opsi? Have a look at the opsi map: http://opsi.org/opsi-map/.
Benutzeravatar
embl-structures
Beiträge: 327
Registriert: 13 Jan 2010, 18:41
Wohnort: Heidelberg
Kontaktdaten:

Re: Vergleich von Strings der Art "1.2.3.4"?

Beitrag 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
Antworten