J'avais besoin de convertir des tailles de fichier exprimées en diférentes unités (Ko, Mo, Go...) en unité Octale
J'avais aussi besoin d'afficher ces taille sous un format lisible (le format décimal de l'unité la plus appropriée)
J'ai donc fait la micro-librairie "uSizeConvertion"(seulement 3 fonctions) capable de convertir une taille en une autre unitée ou de l'afficher directement sous un format lisible
Source / Exemple :
unit uSizeConversion;
{
Version 1.1 (20 Octobre 2010)
Cette classe permet de convertir des tailles d'une unitée (Octet, Kilo-Octet, Mega-Octet,
Giga-Octet, Téra-Octet) vers une autre.
- "ConvertSize" renvoyant un entier, sa valeur peut être une valeur approchée si l'unitée
de sortie est plus grande que l'unitée d'entrée
}
interface
Uses
Math, SysUtils;
Const
c_TXT_SizeUnit : Array [0..4] Of String = ('Octet(s)', 'Kilo-Octet(s)', 'Mega-Octet(s)', 'Giga-Octet(s)', 'Téra-Octet(s)');
c_TXT_SizeId : Array [0..4] Of String = ('Oc', 'Ko', 'Mo', 'Go', 'To');
Type
tSizeUnit = (suByte, suKByte, suMByte, suGByte, suTByte);
Function ConvertSize(Const Size : int64; Const InputType, OutPutUnit : tSizeUnit) : int64; // Convertit une taille d'une unité vers une autre (ex : 1 Ko en 1024 octets )
Function GetAdaptedSize(Const OctalSize : int64) : string; OverLoad; // Convertit une taille exprimée en octets vers la première unité dont la partie entière est située entre 1 et 999, puis renvoi le resultat sous la forme d'une chaine
Function GetAdaptedSize(Const Size : int64; Const InputUnit : tSizeUnit) : string; OverLoad; // Convertit une taille d'une unité quelconque (Octets, Ko, Mo...) vers la première unité dont la partie entière est située entre 1 et 999, puis renvoi le resultat sous la forme d'une chaine
implementation
{
Convertit une taille d'une unité vers une autre (ex : 1 Ko en 1024 octets )
"Size" est la taille à convertir, exprimée en "InputType"
"Inputtype" est l'unité d'origine
"OutputUnit" est l'unité du resultat
}
Function ConvertSize(Const Size : int64; Const InputType, OutPutUnit : tSizeUnit) : int64;
Begin
if InputType < OutPutUnit
Then
Result := trunc(Size / power(1024, ord(OutPutUnit) - ord(InputType)))
Else
Result := trunc(Size * power(1024, ord(InputType) - ord(OutPutUnit)));
End;
{
Convertit une taille exprimée en octets vers la première unité dont la partie entière est située
entre 1 et 999, puis renvoi le resultat sous la forme d'une chaine (Ex : 1024 Octets sera
convertit en 1Ko)
}
Function GetAdaptedSize(Const OctalSize : int64) : string;
Var
I : Integer;
Size : Extended;
Begin
I := 0; // On part en unité octale
Size := OctalSize;
While (Size > 999) And (I < 4) // Tant que la partie entière dépasse 999 pour l'unitée courrante...
Do
Begin
Inc(I); // .. On incremente l'unité courrante
Size := (Size / power(1024, 1)); // .. On calcule la valeur dans cette unité
End;
Result := format('%f %s', [Size, c_TXT_SizeId[I]]) // On renvoi le resultat sous forme de chaine
End;
{
Convertit une taille d'une unité quelconque (Octets, Ko, Mo...) vers la première unité dont
la partie entière est située entre 1 et 999, puis renvoi le resultat sous la forme d'une
chaine (Ex : 2048 Ko sera convertit en "2 Mo")
}
Function GetAdaptedSize(Const Size : int64; Const InputUnit : tSizeUnit) : string;
Begin
Result := GetAdaptedSize(ConvertSize(Size, InputUnit, suByte)); // Convertit la valeur d'entrée en unitée Octale puis on convertit dans l'unité la plus appropriée
End;
end.
Conclusion :
Les resultats êtant exprimés sous forme d'entiers, la valeur est une valeur approchée lorsqu'on utilise ConvertSize() dans le sens Oc -> To.
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.