Created
May 22, 2018 08:24
-
-
Save itsho/714e6cb9deb0bd8350867e9db95f753d to your computer and use it in GitHub Desktop.
Compare Versions as strings in InnoScript. fixed html tags from source article
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ----------------Compare versions - start ------------------ | |
// source: http://www.arvydas.co.uk/2015/04/compare-version-strings-with-innosetup/ | |
// Procedure to split a string into an array of integers | |
procedure Explode(var Dest: TArrayOfInteger; Text: String; Separator: String); | |
var | |
i, p: Integer; | |
begin | |
i := 0; | |
repeat | |
SetArrayLength(Dest, i+1); | |
p := Pos(Separator,Text); | |
if p > 0 then begin | |
Dest[i] := StrToInt(Copy(Text, 1, p-1)); | |
Text := Copy(Text, p + Length(Separator), Length(Text)); | |
i := i + 1; | |
end else begin | |
Dest[i] := StrToInt(Text); | |
Text := ''; | |
end; | |
until Length(Text)=0; | |
end; | |
// Function compares version strings numerically: | |
// * when v1 = v2, result = 0 | |
// * when v1 < v2, result = -1 | |
// * when v1 > v2, result = 1 | |
// | |
// Supports version numbers with trailing zeroes, for example 1.02.05. | |
// Supports comparison of two version number of different lengths, for example | |
// CompareVersions('1.2', '2.0.3') | |
// When any of the parameters is '' (empty string) it considers version number as 0 | |
function CompareVersions(v1: String; v2: String): Integer; | |
var | |
v1parts: TArrayOfInteger; | |
v2parts: TArrayOfInteger; | |
i: Integer; | |
begin | |
if v1 = '' then | |
begin | |
v1 := '0'; | |
end; | |
if v2 = '' then | |
begin | |
v2 := '0'; | |
end; | |
Explode(v1parts, v1, '.'); | |
Explode(v2parts, v2, '.'); | |
if (GetArrayLength(v1parts) > GetArrayLength(v2parts)) then | |
begin | |
SetArrayLength(v2parts, GetArrayLength(v1parts)) | |
end else if (GetArrayLength(v2parts) > GetArrayLength(v1parts)) then | |
begin | |
SetArrayLength(v1parts, GetArrayLength(v2parts)) | |
end; | |
for i := 0 to GetArrayLength(v1parts) - 1 do | |
begin | |
if v1parts[i] > v2parts[i] then | |
begin | |
{ v1 is greater } | |
Result := 1; | |
exit; | |
end else if v1parts[i] < v2parts[i] then | |
begin | |
{ v2 is greater } | |
Result := -1; | |
exit; | |
end; | |
end; | |
{ Are Equal } | |
Result := 0; | |
end; | |
// ----------------Compare versions - end ------------------ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment