Tableau ascii

Description

Bonjour,

En réalisant un programme de gestion de bases de données dans lequel j'avais des milliers de ligne à traiter j'ai crée cette petite fonction. Cette fonction permet simplement d'afficher des informations sous formes de tableau dans un Memo ou un RichEdit.

Son fonctionnement est tres simple il faut lui passer en entrer les parametres suivant :
1 - Une commande (Integer) 0 (Réalise les entetes de colonnes) ou 1 (Réalise une nouvelle ligne) ou 2(Ligne de fermeture)
2 - Champ (TStringList) : Nom des colonnes du tableau
3 - TailleChamp (TStringList) : Taille des colonnes du tableau

Cette fonction renvoi une ligne formaté.

Bien entendu pour un affichage correct il faut une police unicode.

Le petit exemple fournit vous donnera un apercu.

J'espere que cela pourra dépanner ou aider d'autres programmeur.

Source / Exemple :


{------------------------------------------------------------------------------}
{                           Génération du tableau ASCII                        }
{------------------------------------------------------------------------------}
function Tableau(Commande : Word; Champ : TStringList; var TailleChamp : TStringList) : String;

   {Centrage du texte}
   function FormatTxt(TailleChamp : Integer; Item : String) : String;

   var
   TailleItem,Deb,Fin : Integer;

   begin
   TailleItem  := Length(Item);

      If TailleItem > TailleChamp then
      begin
      {Si la taille du texte à inséré est supérieur à la taille du champ on
      tronque le texte}
      Result := '|' + Copy(Item,1,TailleChamp);
      end
      else
      begin
      {On détermine le nombre d'espace avant et apres le texte}
      Deb := (TailleChamp - TailleItem) div 2;
      Fin := TailleChamp - TailleItem - Deb;
      Result := '|' + StringOfChar(' ',Deb) + Item + StringOfChar(' ',Fin);
      end;
   end;

var
Temp : String;
I : Integer;

begin

   Try

   If TailleChamp.Count < Champ.Count then
   begin
   {Si la taille de tous les champs n'est pas définis et bien on prends la taile
   du texte du champ comme taille de champ}

      For I:= TailleChamp.Count to Champ.Count-1 do
      TailleChamp.Add(IntToStr(Length(Champ.Strings[I])));
   end;

Temp := '';

   For I:=0 to Champ.Count-1 do
   begin

      {Si la taille du champ est nul on prends la taille du texte du champ}
      If Length(TailleChamp.Strings[I]) = 0 then
      TailleChamp.Strings[I] := IntToStr(Length(Champ.Strings[I]));

   Temp := Temp + FormatTxt(StrToInt(TailleChamp.Strings[I]),Champ.Strings[I]);
   end;

Temp := Temp + '|';

   {Commande =
    0 : Création de l'entete du tableau
    1 : Ajout d'une ligne
    2 : Cloture du tableau}
   case Commande of
   0 : Result := '   +' + StringOfChar('-',Length(Temp)-2) + '+' + #13#10 + '   ' +
       Temp + #13#10 + '   +' + StringOfChar('-',Length(Temp)-2) + '+';
   1 : Result := '   ' + Temp;
   else
   Result := '   +' + StringOfChar('-',Length(Temp)-2) + '+';
   end;
   except
   Result := 'Erreur à la construction de la ligne.';
   end;
end;

Conclusion :


Il y a biensure plein de possibilités comme centrage a gauche a droite ect ... mais l'utilité principale de cette fonction est que dans un affichage réduit on peut voir un maximum d'informations pour des traitements long.

Codes Sources

A voir également

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.