Trier un fichier texte [Résolu]

Messages postés
23
Date d'inscription
dimanche 24 août 2003
Dernière intervention
11 février 2007
- - Dernière réponse : fox37
Messages postés
23
Date d'inscription
dimanche 24 août 2003
Dernière intervention
11 février 2007
- 11 févr. 2007 à 19:50
bonjour

voici un sujet qui s'approche de certains que j'ais deja pus lire .

J'ais un fichier txt avec des valeurs separe par des ";"
A chaques fin de ligne il y a un return
J'arrive a extraire mes lignes et les afficher dans un memo.
Mais maintenant je voudrais recuperer la 4eme valeur (16,456)qui se trouve entre les ;
ceci afin de tester cette valeur et la supprimer si elle est superieur au chiffre 100.

ex :12/12/2007;12:16:12;16,456;45

merci de votre aide
fabrice
Afficher la suite 

Votre réponse

9 réponses

Meilleure réponse
Messages postés
220
Date d'inscription
dimanche 5 janvier 2003
Dernière intervention
6 janvier 2011
1
3
Merci
Salut,

utilise des Tstinglist

var
lig : TStringList;
begin

lig:= tstringlist.Create;

  lig.Delimiter:=';';

etc etc.......................

couf

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 119 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_couf
Messages postés
220
Date d'inscription
dimanche 5 janvier 2003
Dernière intervention
6 janvier 2011
1
3
Merci
RE,

Tu aurais corrigé de toi même
pas lig.Add(ligne)
mais lig.DelimitedText := ligne;

couf

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 119 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_couf
3
Merci
Salut,

Deux remarques :

-
if OpenDialog1.FileName<>''  : ca ne sert a rien. Tu peux supprimer cette ligne car tu n'as pas d'autre choix que de sélectionner un fichier ou de fermer.

Secondo :

AssignFile(F, OpenDialog1.FileName) ;
Reset(F);
Texte:='';
Repeat
Readln(F, Ligne);
lig := Tstringlist.Create ;
lig.Delimiter:=';';
lig.LoadFromFile(OpenDialog1.FileName);
lig.Delimiter:=';';
D := lig.strings[3];
edit2.Text := D ;
end;

Ce qui a en rouge ne sert a rien : tu fais deux fois la meme chose.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 119 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Utilisateur anonyme
Messages postés
220
Date d'inscription
dimanche 5 janvier 2003
Dernière intervention
6 janvier 2011
1
3
Merci
Salut,

cela crève les yeux, je te laisse chercher un peu.
Un petit indice, "fais une boucle."

couf

PS: n'oublie pas de valider sur réponse accepter.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 119 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_couf
Messages postés
23
Date d'inscription
dimanche 24 août 2003
Dernière intervention
11 février 2007
0
Merci
Merci pour cette reponse

je viens d'essayer et le probleme est que je recupere toute la ligne(la 3 dans ce cas) et non pas le ce qui se trouve entre les ";"
voici mon code
procedure TForm1.Ouvrir1Click(Sender: TObject);
begin
OpenDialog1.Execute ; { Affichage de la boîte de dialogue d'ouverture }
if OpenDialog1.FileName<>'' then { si un fichier existant a été selectionner}
begin
AssignFile(F, OpenDialog1.FileName) ; { On assigne a F la valeur opendialog1.filename}
Reset(F); { On ouvre le fichier selectionner en lecture }
Texte:=''; { On définit que texte ne contient rien }
Repeat
Readln(F, Ligne);
lig := Tstringlist.Create ;
lig.Delimiter:=';';
lig.LoadFromFile(OpenDialog1.FileName);
lig.Delimiter:=';';
D := lig.strings[3];
edit2.Text := D ;
end;

merci de votre aide
fabrice
Commenter la réponse de fox37
Messages postés
220
Date d'inscription
dimanche 5 janvier 2003
Dernière intervention
6 janvier 2011
1
0
Merci
Salut,

lig.LoadFromFile(OpenDialog1.FileName);

Je crois que cette ligne ne va pas
moi j'aurai plus fait un lig.Add(ligne);
D:=lig[2]
qui récupère la 3 ème valeur
si tu fait loadfromfile tu récupère tous le fichier.

ici  tu as un tutoriel assez bien fait en anglais
couf
Commenter la réponse de cs_couf
Messages postés
23
Date d'inscription
dimanche 24 août 2003
Dernière intervention
11 février 2007
0
Merci
Bonjour a tous et merci de votre aide
effectivement avec lig.DelimitedText:= ligne  ca marche nickel.
Je vous joins le bout de code.
Par contre maintenant que j'arrive a isoler ma valeur je la transforme en float et je la teste.Si elle est supereiur a 100 je voudrais qu'elle s'affiche dasn le memo2.
Avec mon code j'arrive a afficher uniquement la derniere valeur > 100 et les autres ne sont pas affichées.comment cela se fait t il ?
de plus je voudrais effacer toutes les lignes qui contiennent une valeur > 100;
je vous joins le code

En vous remerciant
Fabrice

DecimalSeparator:=',' ;
Readln(F, Ligne);
lig := Tstringlist.Create ;
lig.Delimiter:=';';
lig.DelimitedText:= ligne ;
edit2.Text := lig.strings[2];
j := strtofloat(lig.Strings[2]);
if j>100 then
begin
memo2.Text :=lig.Strings[2]+chr(13)+chr(10);
end;


 


 


 


 


 


 
Commenter la réponse de fox37
Messages postés
4307
Date d'inscription
samedi 16 octobre 2004
Dernière intervention
2 janvier 2019
34
0
Merci
voici LA bonne methode :

begin
  if OpenDialog1.Execute then
     with TStringList.Create do
        try // on gere tout dans un Try Finally !
          LoadFromFile(OpenDialog1.FileName);
          Delimiter     := ';'; 
          DelimitedText := Text;

          { En delphi le travail sur les réels se font toujours
            en type Extended, ça tombe bien StrToFloat renvois un   
            extended et 100 serat egalement transtypé automatiquement
            dans ce type. Ne pas comparer par contre les types "Real"
            et "Double" sans les transtyper avant en extended ou
            en Single. }

          if StrToFloat(Strings[2]) > 100 then begin
             Self.Caption := 'Superieur a 100';
          end else begin
             Self.Caption := 'Inferieur ou egal a 100';
          end;

        finally
          free; // et on pense a liberer l'instance de la TStringList!
        end;
end;

<hr size="2" width="100%" />Croc (click me)
Commenter la réponse de f0xi
Messages postés
23
Date d'inscription
dimanche 24 août 2003
Dernière intervention
11 février 2007
0
Merci
Bonjour a tous

Je me suis remis sur mon prog pour obtenir enfin ce que je desirais.
Le tous n'est pas forcement optimiser mais bon ca marche.
Je voulais savoir egalement  si il etait possible d'integrer un graphique avec delphi.
Je signale que j'utilise delphi personel 6.
est il possible de rajouter les modules pour tracer les graphiques . Est il possible egalement d'ouvrir eventuelement excel pour tracer ledit graphique.

autrement ej vous livre le code source de mon appli qui est destinée a ouvrir un ficheir texte , de determiner si le 3eme champ est > a 100 .il creer 2 fichier texte , un avec les valeur erronées et l'autre avec les valeur vraie.Il compte egalement le nombre de valeurs erronnées.

merci a tous
fabrice

unit moulinette1;


interface


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


type
  TForm1 = class(TForm)
    MainMenu1: TMainMenu;
    Fichier1: TMenuItem;
    Ouvrir1: TMenuItem;
    Quitter1: TMenuItem;
    OpenDialog1: TOpenDialog;
    memo1: TMemo;
    SaveDialog1: TSaveDialog;
    Label1: TLabel;
    Memo2: TMemo;
    Edit2: TEdit;
    Memo3: TMemo;
    Label2: TLabel;
    Edit1: TEdit;
    Label3: TLabel;
    procedure Quitter1Click(Sender: TObject);
    procedure Ouvrir1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Déclarations privées }
  public
    { Déclarations publiques }
  end;
Type
    Adr = record
       N : String[20]  ;
       P : String[20]  ;
end;
var
  Form1: TForm1;
  F : TextFile ;
  G : TextFile ;
  H : TextFile ;
  Texte : String ;
  erreur : string ;
  vraie : string ;
  Ligne :String ;
  i : integer ;
  k : integer ;
  j : currency ;
  lig : Tstringlist ;
  total : string ;
  totaler : string ;


implementation


{$R *.dfm}


procedure TForm1.Quitter1Click(Sender: TObject);
begin
        Application.Terminate ;
end;


procedure TForm1.Ouvrir1Click(Sender: TObject);
begin
    OpenDialog1.Execute ;  { Affichage de la boîte de dialogue d'ouverture }
    if OpenDialog1.FileName<>'' then { si un fichier existant a été selectionner}
    begin
    AssignFile(F, OpenDialog1.FileName) ; { On assigne a F la valeur opendialog1.filename}
    Reset(F); { On ouvre le fichier selectionner en lecture }
    Texte:=''; { On définit que texte ne contient rien }
    i := 0 ;
    k := 0 ;
    Repeat
    DecimalSeparator:=',' ; {Définition du symbole décimal}
    Readln(F, Ligne);     {on lit F et on le stocke la ligne dans Ligne}
    lig := Tstringlist.Create  ;
     lig.Delimiter:=';';
     lig.DelimitedText:= ligne ;
    if (lig.Strings[2]<>'') then
    begin
     j := strtofloat(lig.Strings[2]);
     if j>100 then  {si J supérieur a 100 ecrire la valeur dans memo2.text}
     begin
     i := i+1 ;
     totaler := floattostr(i) ;
     edit2.Text := totaler;
     erreur:=erreur+lig.Strings[0]+';'+lig.Strings[1]+';'+lig.Strings[2]+chr(13)+chr(10);
     memo2.Text := erreur;
     Assignfile(G,'C:\erreur.txt');
     {$I-}
     Append(G);
     {$I+}
        if (IOresult=0) then
        begin
                Writeln(G,ligne);
                CloseFile(G);
        end
        else
        begin
                rewrite(G) ;
                Writeln(G,ligne);
                CloseFile(G);
        end
     end
     else
     begin
     k := k+1 ;
     total := floattostr(k) ;
     edit1.Text := total;
     vraie:=vraie+lig.Strings[2]+chr(13)+chr(10);
     memo3.Text := vraie;
     Assignfile(H,'C:\valeurvraie.txt');
     {$I-}
     Append(H);
     {$I+}
        if (IOresult=0) then
        begin
                Writeln(H,ligne);
                CloseFile(H);
        end
        else
        begin
                rewrite(H) ;
                Writeln(H,ligne);
                CloseFile(H);
        end
     end;
     end;
     Texte:=Texte+Ligne+chr(13)+chr(10);
     memo1.Text:=Texte;
    Until EOF(f);
    CloseFile(F);
    end;
end;


procedure TForm1.FormCreate(Sender: TObject);
begin
        memo1.Clear ;
        memo2.Clear ;
        DeleteFile('C:\valeurvraie.txt');
        DeleteFile('C:\erreur.txt');
end;


end.
Commenter la réponse de fox37

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.