AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Code-Bibliothek Neuen Beitrag zur Code-Library hinzufügen Delphi Zwei Version-Strings (mit Buchstaben) vergleichen
Thema durchsuchen
Ansicht
Themen-Optionen

Zwei Version-Strings (mit Buchstaben) vergleichen

Ein Thema von hypfvieh · begonnen am 17. Feb 2011 · letzter Beitrag vom 17. Feb 2011
 
hypfvieh

Registriert seit: 1. Jan 2009
2 Beiträge
 
#1

Zwei Version-Strings (mit Buchstaben) vergleichen

  Alt 17. Feb 2011, 08:30
Hier ein simpler Code um 2 Versionsnummern zu prüfen.
Dazu werden die Buchstaben in ihre entsprechenden Zahlenwerte verwandelt, sämtlich Sonderzeichen werden ignoriert.

Limitierung: Wenn die Versionsnummer die Größe von Int64 überschreitet.

Ich habe hier 2 Versionen zur Verfügung gestellt, die erste ist getestet unter Delphi 2006 und Free Pascal 2.4.0.
Die zweite Version ist unter Delphi XE getestet worden.

Der Unterschied ist die Verwendung von "CharInSet" (in Delphi 2006 und FPC nicht verfügbar), um Kompatibilität mit WideStrings zu gewährleisten.
Die erste Version funktioniert zwar generell auch in den neueren Delphi Versionen, es wird aber fehlende WideString Kompatibilität angemahnt.

Delphi 2006/Free Pascal Version:
Delphi-Quellcode:
function checkversion(ver1,ver2 : string) : byte;
var i : integer;
    tmp1,tmp2 : string;
    cver1,cver2 : int64;
begin
{
  Return values:
      0: versions are equal
      1: ver1 is bigger then ver2
      2: ver2 is bigger then ver1
    253: ver1 is too big (could not be converted to int64)
    254: ver2 is too big (could not be converted to int64)
}


  tmp1 := '';
  tmp2 := '';

  for i := 1 to length(ver1) do begin
    if (ver1[i] in ['a'..'z']) or (ver1[i] in ['A'..'Z']) then
      tmp1 := tmp1 + inttostr(Ord(ver1[i]));
    if (ver1[i] in ['0'..'9']) then
      tmp1 := tmp1 + ver1[i];
  end;
  for i := 1 to length(ver2) do begin
    if (ver2[i] in ['a'..'z']) or (ver2[i] in ['A'..'Z']) then
      tmp2 := tmp2 + inttostr(Ord(ver2[i]));
    if (ver2[i] in ['0'..'9']) then
      tmp2 := tmp2 + ver2[i];
  end;

  if not TryStrToInt64(tmp2,cver2) then begin
        checkversion := 254;
        exit;
  end;
  if not TryStrToInt64(tmp1,cver1) then begin
        checkversion := 253;
        exit;
  end;



  if ver1 > ver2 then
    checkversion := 1
  else if ver2 > ver1 then
    checkversion := 2
  else
    checkversion := 0;
end;
Delphi XE Version:
Delphi-Quellcode:
function checkversion(ver1,ver2 : string) : byte;
var i : integer;
    tmp1,tmp2 : string;
    cver1,cver2 : int64;
begin
{
  Return values:
      0: versions are equal
      1: ver1 is bigger then ver2
      2: ver2 is bigger then ver1
    253: ver1 is too big (could not be converted to int64)
    254: ver2 is too big (could not be converted to int64)
}


  tmp1 := '';
  tmp2 := '';

  for i := 1 to length(ver1) do begin
    if (CharInSet(ver1[i],['a'..'z'])) or (CharInSet(ver1[i],['A'..'Z'])) then
      tmp1 := tmp1 + inttostr(Ord(ver1[i]));
    if (CharInSet(ver1[i],['0'..'9'])) then
      tmp1 := tmp1 + ver1[i];
  end;
  for i := 1 to length(ver2) do begin
    if (CharInSet(ver2[i],['a'..'z'])) or (CharInSet(ver2[i],['A'..'Z'])) then
      tmp2 := tmp2 + inttostr(Ord(ver2[i]));
    if (CharInSet(ver2[i],['0'..'9'])) then
      tmp2 := tmp2 + ver2[i];
  end;

  if not TryStrToInt64(tmp2,cver2) then begin
    checkversion := 254;
    exit;
  end;
  if not TryStrToInt64(tmp1,cver1) then begin
    checkversion := 253;
    exit;
  end;


  if cver1 > cver2 then
    checkversion := 1
  else if cver2 > cver1 then
    checkversion := 2
  else
    checkversion := 0;
end;
Aufruf-Beispiel:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var test : byte;
begin
  test := checkversion(edit1.text,edit2.text);

  if test >= 253 then
    showmessage('Error while comparing')
  else if test = 2 then
    showmessage('Version 2 is newer')
  else if test = 1 then
    showmessage('Version 1 is newer')
  else
    showmessage('Versions are equal');
end;
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:04 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz