AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

else ifs werden übersprungen

Ein Thema von xZise · begonnen am 11. Sep 2007 · letzter Beitrag vom 12. Sep 2007
Antwort Antwort
Seite 3 von 3     123   
Dax
(Gast)

n/a Beiträge
 
#21

Re: else ifs werden übersprungen

  Alt 11. Sep 2007, 22:48
Da hast du wohl Recht Aber für den Fall, dass man keine Build-Nummer benutzen will (oder die aus irgend einem Grund nicht konsequent hochzählt), wäre dann unser Vorschlag ebenfalls geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#22

Re: else ifs werden übersprungen

  Alt 11. Sep 2007, 23:19
Hi,

diese Funktion liefert folgendes Ergebnis:

V1 < V2 -> -1
V1 = V2 -> 0
V1 > V2 -> 1

und zwar immer wenn die einzelnen Versions-Zahlen nicht größer sind, als in ein integer passt.
Wer es grösser mag und braucht, kann ja auch int64 nehmen.

Die Funktion stammt aus einem Projekt von mir, wo ich in einem VirtualStringTree u.a. nach Versions-Nummern sortieren lassen will.
Klappt übrigens auch hervorragend mit IP-Adressen (verwende ich in dem geleichen Projekt auch dafür)

cu

Oliver

Delphi-Quellcode:
function VersionCompareStr(const V1, V2 : string) : integer;
var
  tvSL,
  cvSL : TStrings;
  i : integer;
  equal : boolean;
  tV1, tV2 : string;
begin
  tvSL := TStringList.Create;
  cvSL := TStringList.Create;
  try
    tV1 := V1;
    tV2 := V2;
    tV1 := StringReplace( tV1, ',', '.', [ rfReplaceAll ] );
    tV2 := StringReplace( tV2, ',', '.', [ rfReplaceAll ] );

    tV1 := StringReplace( tV1, '_', '.', [ rfReplaceAll ] );
    tV2 := StringReplace( tV2, '_', '.', [ rfReplaceAll ] );

    tvSL.Delimiter := '.';
    cvSL.Delimiter := '.';
    tvSL.DelimitedText := tV1;
    cvSL.DelimitedText := tV2;


    while tvSL.Count < cvSL.Count
    do
      tvSL.Add( '0' );
    while cvSL.Count < tvSL.Count
    do
      cvSL.Add( '0' );
    i := 0;
    RESULT := 0;
    equal := true;
    while ( i < tvSL.Count ) and equal
    do begin
      equal := StrToIntDef( tvSL.Strings[ i ], 0 ) = StrToIntDef( cvSL.Strings[ i ], 0 );
      if not equal
      then
        if StrToIntDef( tvSL.Strings[ i ], 0 ) < StrToIntDef( cvSL.Strings[ i ], 0 )
        then
          RESULT := -1
        else
          RESULT := 1;
      Inc( i );
    end;

  finally
    FreeAndNil( tvSL );
    FreeAndNil( cvSL );
  end;
end;
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#23

Re: else ifs werden übersprungen

  Alt 12. Sep 2007, 09:51
Ich würde mal sagen die beste Lösung ist die von Dax:
Delphi-Quellcode:
funtion VersionID(Major, Minor, Release, Build: Word): Int64;
begin
  Result := Int64(Major) shl 48 or Int64(Minor) shl 32 or Release shl 16 or Build;
end;
Kurz, knackig und effizient.
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#24

Re: else ifs werden übersprungen

  Alt 12. Sep 2007, 14:16
Jap Mir fiel gestern noch auf, dass er auch bei gleichen Versionen zuschlägt.
Gibt es denn sozusagen ein int64 als vorzeichenlose Ganzzahl?
Und eine Frage zu Int64: ist das erste Bit ein Vorzeichenbit? (Also 63 Bits für die Zahl?) Oder ist "0" dass minimum? (also "- (MAX_INT64 / 2)?)
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
s-off
(Gast)

n/a Beiträge
 
#25

Re: else ifs werden übersprungen

  Alt 12. Sep 2007, 14:19
@xZise:

Hattest Du wirklich das Create vergessen? Deine Bildchen waren nicht ganz aussagekräftig - bin mir nicht sicher, ob Du Deinen Kopf wegen Dir, oder wegen mir an der Wand zerschmetterst
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#26

Re: else ifs werden übersprungen

  Alt 12. Sep 2007, 14:25
Zitat von s-off:
bin mir nicht sicher, ob Du Deinen Kopf wegen Dir, oder wegen mir an der Wand zerschmetterst
Nein Es war kein Create drinne Es bezog sich eher auf mich als auf dich
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
s-off
(Gast)

n/a Beiträge
 
#27

Re: else ifs werden übersprungen

  Alt 12. Sep 2007, 14:28
Na dann bin ich ja froh - danke für's Feedback
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#28

Re: else ifs werden übersprungen

  Alt 12. Sep 2007, 15:31
Zitat von xZise:
Gibt es denn sozusagen ein int64 als vorzeichenlose Ganzzahl?
Leider nicht. (Zumindest Delphi Version <= 5.0)
Zitat von xZise:
Und eine Frage zu Int64: ist das erste Bit ein Vorzeichenbit? (Also 63 Bits für die Zahl?)
Ja.
Andreas
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


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:16 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz