Trier un fichier texte [Résolu]

fox37 23 Messages postés dimanche 24 août 2003Date d'inscription 11 février 2007 Dernière intervention - 19 janv. 2007 à 19:11 - Dernière réponse : fox37 23 Messages postés dimanche 24 août 2003Date d'inscription 11 février 2007 Dernière intervention
- 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
cs_couf 220 Messages postés dimanche 5 janvier 2003Date d'inscription 6 janvier 2011 Dernière intervention - 19 janv. 2007 à 21:33
3
Merci
Salut,

utilise des Tstinglist

var
lig : TStringList;
begin

lig:= tstringlist.Create;

  lig.Delimiter:=';';

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

couf

Merci cs_couf 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 96 internautes ce mois-ci

Commenter la réponse de cs_couf
Meilleure réponse
cs_couf 220 Messages postés dimanche 5 janvier 2003Date d'inscription 6 janvier 2011 Dernière intervention - 20 janv. 2007 à 23:53
3
Merci
RE,

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

couf

Merci cs_couf 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 96 internautes ce mois-ci

Commenter la réponse de cs_couf
Meilleure réponse
Utilisateur anonyme - 21 janv. 2007 à 01:12
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.

Merci Utilisateur anonyme 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 96 internautes ce mois-ci

Commenter la réponse de Utilisateur anonyme
Meilleure réponse
cs_couf 220 Messages postés dimanche 5 janvier 2003Date d'inscription 6 janvier 2011 Dernière intervention - 21 janv. 2007 à 09:41
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.

Merci cs_couf 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 96 internautes ce mois-ci

Commenter la réponse de cs_couf
fox37 23 Messages postés dimanche 24 août 2003Date d'inscription 11 février 2007 Dernière intervention - 20 janv. 2007 à 21:13
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
cs_couf 220 Messages postés dimanche 5 janvier 2003Date d'inscription 6 janvier 2011 Dernière intervention - 20 janv. 2007 à 23:26
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
fox37 23 Messages postés dimanche 24 août 2003Date d'inscription 11 février 2007 Dernière intervention - 21 janv. 2007 à 09:03
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
f0xi 4304 Messages postés samedi 16 octobre 2004Date d'inscription 9 mars 2018 Dernière intervention - 21 janv. 2007 à 18:01
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
fox37 23 Messages postés dimanche 24 août 2003Date d'inscription 11 février 2007 Dernière intervention - 11 févr. 2007 à 19:50
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.