Convertisseur de fichier type "tree >> nomfichier.txt"

Soyez le premier à donner votre avis sur cette source.

Snippet vu 6 706 fois - Téléchargée 28 fois

Contenu du snippet

Ceux qui ont deja tapé dans l'invite de commande un
tree >> repertoire.txt
savent que le fichier est difficilement lisible par la suite, car plein de caracteres bizarres en lieu et place des arborescences.
Cette source va ouvrir le fichier et remplacer tous les caracteres "genants" par des caracteres plus faciles a lire...

Personellement, je l'utilise pour maintenir "a jour" la liste de mes albums.

Source / Exemple :


unit fiche_principale;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    lister: TButton;
    emplacement: TEdit;
    listing: TMemo;
    procedure listerClick(Sender: TObject);
  private
    { Déclarations privées }
  public
    { Déclarations publiques }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.listerClick(Sender: TObject);
var
Fichier : textfile;
buf : string;
i : integer; // lecture des caracteres  
r: TRect; //pour l'impression
i: Integer;
begin

// Teste si le fichier existe, sinon on sort
if not FileExists(emplacement.Text) then
begin
ShowMessage('Le fichier que vous avez demandé n''existe pas!');
Exit; 
end;

// Affectation de la variable Fichier au fichier
AssignFile(Fichier, emplacement.Text);

// Ouverture en mode lecture
Reset(Fichier);

// On lit ligne à ligne et affiche ce qui est lu
while not Eof(Fichier) do 
begin 
Readln(fichier, buf);

for i := 1 to Length(buf) do
begin
if buf[i] = '³' then listing.Text := Listing.Text+'|' else
if buf[i] = 'Ã' then listing.Text := Listing.Text+'>' else
if buf[i] = 'Ä' then listing.Text := Listing.Text+'-' else
if buf[i] = 'À' then listing.Text := Listing.Text+'+' else

//tous ces caracteres sont ceux de l'arborescence

listing.Text := listing.Text+buf[i]; 
//si le caractere n'est pas un caractere d'arborescence, on ajoute juste le caractere normal 
end;

listing.Lines.Add(''); // ensuite on saute une ligne

end;

// Fermeture du fichier
CloseFile(fichier);

  with Printer do
    begin
      r := Rect(100,100,(Pagewidth - 100),(PageHeight - 100));
      BeginDoc;
      Canvas.Brush.Style := bsClear;
      for j := 0 to Memo1.Lines.Count do
       Canvas.TextOut(100,100 + (j *
                   Canvas.TextHeight(listing.Lines.Strings[j])),
                   listing.Lines.Strings[j]);

      Canvas.Brush.Color := clBlack;
      Canvas.FrameRect(r);
      EndDoc;
    end;

end;

end.

Conclusion :


Voila...
Je suis en train de voir un moyen de lire les infos a partir d'un fichier .ini mais ce n'est pas extremement nescessaire.. .Donc a moins que vous ne me harceliez jour et nuit, je ne vais pas trop me presser pour le mettre au point :p

A voir également

Ajouter un commentaire Commentaires
Messages postés
24
Date d'inscription
dimanche 15 juin 2003
Statut
Membre
Dernière intervention
27 mars 2005

oui le /a/f ne fonctionne que sous Windows XP / 2000
Messages postés
44
Date d'inscription
samedi 16 octobre 2004
Statut
Membre
Dernière intervention
28 février 2006

Exact petite erreur de ma part...
Mais la je voulais faire du code exploitable sous tous les Windows, et il me semble que le /a /f ne fonctionne pas toujours...
Messages postés
24
Date d'inscription
dimanche 15 juin 2003
Statut
Membre
Dernière intervention
27 mars 2005

i : integer; // lecture des caracteres
r: TRect; //pour l'impression
i: Integer;

i est déclaré 2 fois


De plus, sous windows XP il suffit de taper :

tree /a /f >> repertoire.txt

/a le fichier text en Ascii compréhensible
/f pour lister les fichiers ...

Sinon ton code est sympa.
Messages postés
44
Date d'inscription
samedi 16 octobre 2004
Statut
Membre
Dernière intervention
28 février 2006

Ouaouh...

Grand merci a toi! J'avais reutilisé en desespoir de cause une source de ManChesTer mais elle est bien plus Longue.

Grand merci encore une fois
Messages postés
285
Date d'inscription
lundi 16 juin 2003
Statut
Membre
Dernière intervention
11 février 2018

<o> Pour imprimer sans fioritures essaye la procédure suivante :

procedure TForm1.Button1Click(Sender: TObject);
var fic : TextFile;
i : integer;
begin
Memo1.Lines.LoadFromFile('unit1.pas');
AssignFile(fic,'LPT1');
Rewrite(fic);
for i := 0 to Memo1.Lines.Count-1 do
WriteLn(fic,Memo1.Lines[i]);
CloseFile(fic);
end;

Tu peux bien sûr améliorer avec une marge en faisant :

WriteLn(fic,' '+Memo1.Lines[i]);

jp \o/

...etc...
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.