didou2dek
Messages postés45Date d'inscriptionlundi 9 septembre 2002StatutMembreDernière intervention16 avril 2015
-
20 sept. 2008 à 15:35
didou2dek
Messages postés45Date d'inscriptionlundi 9 septembre 2002StatutMembreDernière intervention16 avril 2015
-
22 sept. 2008 à 11:37
bonjour j'utilise un fichier TXT que je rafraichis avec des writeln() TXT, cependant je voudrais recuperer toutes les lignes qui se trouvent apres une certaine valeur. ex : voici un bout de mon fichier
en fait je veux récupérer et afficher dans un memo tout ce qui se trouve apres [PLANNING] pour pouvoir le trier par la suite.
merci par avance pour votre aide
Bacterius
Messages postés3792Date d'inscriptionsamedi 22 décembre 2007StatutMembreDernière intervention 3 juin 201610 20 sept. 2008 à 16:41
Récupérer tout ce qui est après [PLANNING] ?
Alors en utilisant TStringList (pour un fichier texte)
function GetEveryThingAfter(AfterWhat: String; var TextFile: TStringList): String;
var
I: Integer;
Tmp: Integer;
S: String;
begin
S := '';
Tmp := Pos(AfterWhat, TextFile.Text) + Length(AfterWhat);
Result := Copy(S, Tmp, Length(TextFile.Text);
end;
Et voilà !
Principe : la fonction récupère le point de départ juste après le mot que tu cherches
Ici, pour [Planning], il va d'abord trouver la position du premier "[".
Ensuite on ajoute à cette position la taille du mot
Ce qui fait qu'on arrive à [ + 1, soit le "2".
A partir de là, on copie dans le résultat tout (du 2 jusqu'à la fin du texte).
didou2dek
Messages postés45Date d'inscriptionlundi 9 septembre 2002StatutMembreDernière intervention16 avril 2015 21 sept. 2008 à 00:49
merci pour ton aide mais ma procedure ne fonctionne pas regarde si j'ai bon et sois indulgent c'est pas évident pour moi je m'y mets doucement mais ça me plait beaucoup. voila ce que j'ai codé pour utiliser ta fonction
procedure TForm1.Button3Click(Sender: TObject);
var contents : tstringlist;
svar : string;
i : integer;
begin
contents:=tstringlist.Create;
contents.LoadFromFile('c:\planning.txt');
for i:=0 to contents.Count-1 do
begin
svar:=GetEveryThingAfter('[PLANNING]', contents);
memo1.Lines.Add(svar);
exit;
end;
au clic du btn rien ne se passe ?
Bacterius
Messages postés3792Date d'inscriptionsamedi 22 décembre 2007StatutMembreDernière intervention 3 juin 201610 21 sept. 2008 à 10:13
Bonjour,
laisse tomber ta boucle, ma fonction s'occupe de tout.
Et n'oublie pas de libérer Contents.
procedure TForm1.Button3Click(Sender: TObject);
var
Contents: TStringList;
SVar: String;
begin
Contents := TStringList.Create; // Tu crée ta liste
try
if FileExists('C:\Planning.txt') then // Si ton fichier existe alors ...
Contents.LoadFromFile('C:\Planning.txt'); // Tu ouvres la liste
SVar := GetEveryThingAfter('[PLANNING]', Contents); // Tu isoles tout après
Memo1.Lines.Clear; // On vide avant
Memo1.Lines.Text := SVar; // Tu obtiens le tout sous forme de chaîne chariot
finally
Contents.Free; // Tu libères ta liste
end;
end;
Le try..finally permet de garantir que ta liste sera libérée quoi qu'il arrive.
Ca devrait marcher ce coup-ci ;)
Cordialement, Bacterius !
Vous n’avez pas trouvé la réponse que vous recherchez ?
didou2dek
Messages postés45Date d'inscriptionlundi 9 septembre 2002StatutMembreDernière intervention16 avril 2015 21 sept. 2008 à 19:30
Bonsoir, merci de nouveau de m'avoir répondu rapidement mais es tu sur que ta fonction est ok car je viens de tout relancer avec la procédure que tu m'as corrigé mais rien ne se passe le memo reste vide, j'ai essayé de suivre les étapes avec des showmessage mais idem le showmessage reste vide sur la variable Svar ?