Sizeconverter : une mini librairie de conversion de taille

Soyez le premier à donner votre avis sur cette source.

Vue 4 335 fois - Téléchargée 444 fois

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

A voir également

Ajouter un commentaire

Commentaires

kachwahed
Messages postés
19
Date d'inscription
samedi 6 décembre 2008
Statut
Membre
Dernière intervention
5 décembre 2009
-
Bonjour,
Y a aussi des fonctions WinAPI comme ceci:
function StrFormatByteSize(dw: DWORD; szBuf: PChar; uiBufSize: UINT): PChar; stdcall; external 'shlwapi.dll' name 'StrFormatByteSizeA';
function StrFormatKBSize(qdw: LONGLONG; szBuf: PChar; uiBufSize: UINT): PChar; stdcall; external 'shlwapi.dll' name 'StrFormatKBSizeA';
//---------------------------------------------
function Formatted_FileSize(SizeInBytes : Cardinal) : String;
var
arrSize: array[0..255] of Char;
begin
StrFormatByteSize(SizeInBytes, arrSize, Length(arrSize) - 1);
Result := Trim(arrSize);
end;

function KB_Formatted_FileSize(SizeInKB : Cardinal) : String;
var
arrSize: array[0..255] of Char;
begin
detailed mode
StrFormatKBSize(SizeInKB, arrSize, Length(arrSize)-1);
Result := Trim(arrSize);
end;
AlexFr23
Messages postés
33
Date d'inscription
lundi 10 mars 2003
Statut
Membre
Dernière intervention
4 décembre 2010
-
Bonsoir,
Je trouve ton prg intéressant mais tu devrais l'exploiter un peu plus et mettre d'autre unitée de mesure on pourrait choisir cm/inch, aussi avec les poids car il existe cela sur intenet mais parfois j'ai la flème d'aller sur le net pour vérifier une mesure et l'avoir sous la mains dans la barre de tâche serrais plus simpa
Enfin bon travail !
Bon courage pour la suite
Alex

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.