Tableau ascii

Soyez le premier à donner votre avis sur cette source.

Vue 14 808 fois - Téléchargée 961 fois

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

Ajouter un commentaire

Commentaires

Messages postés
65
Date d'inscription
vendredi 15 août 2003
Statut
Membre
Dernière intervention
5 décembre 2005
1
Je viens de découvrir cette source, c'est super
Bravo JMP77 et merci beaucoups.
à+Didier
Messages postés
1119
Date d'inscription
lundi 4 février 2002
Statut
Membre
Dernière intervention
4 octobre 2006
5
J'avais oublié de dire que j'avais mis à jour la source avec type de commande.

Merci à toi Mauricio.
Messages postés
1119
Date d'inscription
lundi 4 février 2002
Statut
Membre
Dernière intervention
4 octobre 2006
5
Non je voulais dire que quand j'ai programmer cette fonction c'était sur une appli de gestion de bases de données assez importante et cette fonction n'était pas primordiale. Donc je n'avais pas trop de temps à ce moment là.
Mais c'est vrai Julio qu'avant de la poster j'aurai pu penser à l'améliorer.

Allez bonne prog tout le monde,
JMP77.
Messages postés
2226
Date d'inscription
dimanche 5 octobre 2003
Statut
Modérateur
Dernière intervention
18 novembre 2010
13
jmp : "pas trop de temps" ? mais il n'y a pas de date limite pour poster tes sources =) prends ton temps, elles seront encore mieux puisque plus finies.
Messages postés
1119
Date d'inscription
lundi 4 février 2002
Statut
Membre
Dernière intervention
4 octobre 2006
5
Ok merci Mauricio c'est vrai que je pense jamais a se genre de type.

Ca me plait bien je mets a jour dans la journée.

Merci bien.
Afficher les 8 commentaires

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.