fox37
Messages postés23Date d'inscriptiondimanche 24 août 2003StatutMembreDernière intervention11 février 2007
-
19 janv. 2007 à 19:11
fox37
Messages postés23Date d'inscriptiondimanche 24 août 2003StatutMembreDernière intervention11 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.
-
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.
fox37
Messages postés23Date d'inscriptiondimanche 24 août 2003StatutMembreDernière intervention11 février 2007 20 janv. 2007 à 21:13
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;
cs_couf
Messages postés213Date d'inscriptiondimanche 5 janvier 2003StatutMembreDernière intervention 6 janvier 20111 20 janv. 2007 à 23:26
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
fox37
Messages postés23Date d'inscriptiondimanche 24 août 2003StatutMembreDernière intervention11 février 2007 21 janv. 2007 à 09:03
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;
f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 202235 21 janv. 2007 à 18:01
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;
fox37
Messages postés23Date d'inscriptiondimanche 24 août 2003StatutMembreDernière intervention11 février 2007 11 févr. 2007 à 19:50
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.
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;