Ceci est un peu plus compliqué, car vous voudriez gérer des versions comme 'V1.R2.12' et 'V0.R15.42' correctement - avec la conversion simple dans l'autre réponse vous obtiendriez 1212 et 1542 , qui ne serait pas comparable à la façon dont vous vous attendriez.
Vous devez déterminer la taille de chaque partie du numéro de version et multiplier les parties par cette valeur pour obtenir un numéro de fin correct. Quelque chose comme ceci:
[Code]
function string_to_numerical_value(AString: string; AMaxVersion: LongWord): LongWord;
var
InsidePart: boolean;
NewPart: LongWord;
CharIndex: integer;
c: char;
begin
Result := 0;
InsidePart := FALSE;
// this assumes decimal version numbers !!!
for CharIndex := 1 to Length(AString) do begin
c := AString[CharIndex];
if (c >= '0') and (c <= '9') then begin
// new digit found
if not InsidePart then begin
Result := Result * AMaxVersion + NewPart;
NewPart := 0;
InsidePart := TRUE;
end;
NewPart := NewPart * 10 + Ord(c) - Ord('0');
end else
InsidePart := FALSE;
end;
// if last char was a digit the last part hasn't been added yet
if InsidePart then
Result := Result * AMaxVersion + NewPart;
end;
Vous pouvez tester cela avec le code suivant:
function InitializeSetup(): Boolean;
begin
if string_to_numerical_value('V1.R2.12', 1) < string_to_numerical_value('V0.R15.42', 1) then
MsgBox('Version ''V1.R2.12'' is not as recent as version ''V0.R15.42'' (false)', mbConfirmation, MB_OK);
if string_to_numerical_value('V1.R2.12', 100) > string_to_numerical_value('V0.R15.42', 100) then
MsgBox('Version ''V1.R2.12'' is more recent than version ''V0.R15.42'' (true)', mbConfirmation, MB_OK);
Result := FALSE;
end;
Que vous passez 10, 100 ou 1000 pour AMaxVersion
dépend du nombre et la portée de vos pièces de numéro de version. Notez que vous ne devez pas déborder la variable résultat LongWord
, qui a une valeur maximale de 2^32 - 1.
Le dernier nombre (0,12) est-il pertinent pour la comparaison? En supposant que 'R' soit synonyme de version, vous n'auriez qu'un seul numéro de build associé, donc si vous avez un processus de publication solide, vous pouvez l'ignorer. – Treb