Autor Beitrag
DOCa Cola
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 64

Vista x64
D2007
BeitragVerfasst: Do 21.06.07 19:56 
Ich schreibe einen einfachen online update check für mein programm. nun brauche ich eine funktion mit der es möglich ist 2 versionsstrings zu vergleich. z.B zwischen "1.5.9" und "1.5.10" soll verglichen werden. die funktion soll mir in diesem fall zurückgeben das die versionsnummer 1.5.10 die neuere ist. soll dann so aussehen

ausblenden Delphi-Quelltext
1:
function isOnlineVersionNewer(currentVersion, onlineVersion : string): boolean;					
Robinator
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 275

WinXP
BDS 2006
BeitragVerfasst: Do 21.06.07 20:02 
Wieso nimmst du dafür nen String? Nen Gleitkommawert würde sich doch viel eher anbieten, den kannst du dann auch einfach mit > vergleichen.

gruss, Rob

_________________
erare humanum est
COMMANDER86
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 167

Win XP, Win Vista
D3 Prof., D7 Pers., Lazarus
BeitragVerfasst: Do 21.06.07 20:05 
Trenne den String auf... die Punkte dienen dabei als Trennzeichen. Dann vergleichst Du die Zahlen. In der Regel sind es ja nur 4...

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
  if (SERVER_VERSION_1 >= VERSION_1)
  or (SERVER_VERSION_2 >= VERSION_2)
  {...}
  or (SERVER_VERSION_4 > VERSION_4)
  then UPDATE;


Viel Glück! ;)

_________________
Streichen Sie bitte sämtlichen Sarkasmus aus vorhergehender Nachricht. Dann wissen Sie, was ich sagen möchte. Meine Lösungen sind die vermutlich Umständlichsten, aber sie funktionieren (bei mir). ;)
Robinator
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 275

WinXP
BDS 2006
BeitragVerfasst: Do 21.06.07 20:19 
Wozu Trennzeichen? Wenns Strings sein sollen dann mach sowas wie:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
    
function isOnlineVersionNewer(currentVersion, onlineVersion : string): boolean;
  function VersToInt(const Vers : String) : integer;
  var 
    T : String;  
  begin
    T := '';
    for I := 1 to Length(Vers) do
      if Vers[i] in ['0'..'9'then
        T := T + Vers[I];
    Result := StrToInt(T);
  end;  
begin
  Result := VersToInt(onlineVersion) > VersToInt(currentVersion);  
end;


//EDIT Wenn die Versions-Strings unterschiedlich viele Stellen haben geht das so natürlich nich

grüsse

_________________
erare humanum est
DOCa Cola Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 64

Vista x64
D2007
BeitragVerfasst: Do 21.06.07 20:46 
user profile iconRobinator hat folgendes geschrieben:
//EDIT Wenn die Versions-Strings unterschiedlich viele Stellen haben geht das so natürlich nich


das ist genau die sache, 1.5.10 ist neuer als die 1.5.9 und ich denke wird wohl mit der funktion fehlschlagen. float fällt leider weg, da die versionsnummer eben mehrere punkttrennungen als nur eine hat...
Marc.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1876
Erhaltene Danke: 129

Win 8.1, Xubuntu 15.10

BeitragVerfasst: Do 21.06.07 20:47 
Was hälst du davon?
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
function isOnlineVersionNewer(currentVersion, onlineVersion : string): boolean;
begin
 case AnsiCompareStr(CurrentVersion,OnlineVersion) of
   1: isonlineversionnewer :=  true;
  -1: isonlineversionnewer :=  false;
 end;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
 showmessage(booltostr(isOnlineVersionNewer('1.5555.96','1.6.6')));
end;
:P

€: Mir fällt gerade auf, dass diese Funktion bei den letzten Ziffern Probleme bekommt. Beispielsweiße bei: '1.5.9','1.5.10'
Denn 9 > 1 - die Null wird hier ignoriert! Hier könnte also auch genauso gut stehen:'1.5.90' und'1.5.10'.
Ansonsten funktionierts meines Erachtens prima. ;)


€2: Warum schreibst du nicht zb. "1.5.09" anstelle von "1.5.9" ? Würde die Sache vereinfachen. :)

grüße


Zuletzt bearbeitet von Marc. am Do 21.06.07 21:01, insgesamt 1-mal bearbeitet
Marco D.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2750

Windows Vista
Delphi 7, Delphi 2005 PE, PHP 4 + 5 (Notepad++), Java (Eclipse), XML, XML Schema, ABAP, ABAP OO
BeitragVerfasst: Do 21.06.07 21:01 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
type
   TVersionNumber = record
       MainVersion: byte;
       Subversion: byte;
       Build: integer;
   end;

   function GetNewerVersion(Version1,Version2: TVersionNumber): integer;
   begin
       if (Version1.MainVersion < Version2.MainVersion) then
            result := 2 
       else
       begin
            if (Version1.SubVersion < Version2.SubVersion) then
                  result := 2 
            else
            begin
                 if (Version1.Build < Version2.Build) then
                       result := 2
                 else
                       result := 1;
            end;
        end;
    end;

Soll so gehen, denke ich. :P

_________________
Pascal keeps your hand tied. C gives you enough rope to hang yourself. C++ gives you enough rope to shoot yourself in the foot