Sizeconverter : une mini librairie de conversion de taille

Description

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.

Codes Sources

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.