Recherche dans un fichier text [Résolu]

Signaler
Messages postés
196
Date d'inscription
jeudi 22 février 2007
Statut
Membre
Dernière intervention
26 novembre 2009
-
Messages postés
196
Date d'inscription
jeudi 22 février 2007
Statut
Membre
Dernière intervention
26 novembre 2009
-
salut je debute encore sous delphi et j'aime bien savoir comment rechercher un mot dans un fichier texte et determiner la ligne puis l'afficher :)) merci d'avance pour vos bout de code :)

merci ;)

12 réponses

Messages postés
470
Date d'inscription
vendredi 14 novembre 2003
Statut
Membre
Dernière intervention
23 octobre 2007
1
Salut

Voila ce que je te propose (je n'ai pas de code sous la main désolé)

- Charger le fichier texte dans un mémo ou richedit (loadfromfile)
- Faire une boucle ($i) de 0 à memo.lines.count (de 0 jusqu'a la dernière lignes)
- A chaque itération de la boucle, chercher "mot clé" (avec ansipos?)
- Si il l'a trouvé tu affiches: " la ligne où se trouve 'mot clé' est $i ".

J'espère que c'est compréhensible, sinon n'hésite pas.

++

Filipe

__________________________________________________
http://www.OgameTut.Free.Fr - Le site sur ogame de référence !
http://Signz.free.fr - Le gén&#
Messages postés
814
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
30 juillet 2009
3
salut,

@Filipe35: oui t'es pas réveiller.  Il a poser la question pour Delphi. (donc en pascal object je suppose)

function GetLineNumber(aFileName : string ; aWord : string) :  integer;
// return -1 si pas trouvé. pas case sensitive.
var
  str : tstringlist;
i : integer;
begin
result := -1;
str := Tstringlist.create;
aWord :=uppercase( aWord); // pour ne pas dependre de la case. a toi de voir
try
str.loadfromfile(afilename);
for i := 0 to str.count-1 do // pour chaque ligne du fichier
  if pos( aWord, uppercase(str[i]) > 0 then begin
    result := i;
   exit; // trouvé, donc on quit.
  end;//if
finally
str.free;
end;//try

end;

et pour l'afficher:

Showmessage(format('Le mot %s est à la ligne %d', ['TonMot', getlineNumber('fichier.ext', 'ToMot']));

c'est pas testé et fait en "live". mais l'algo est bon.

bon code,

Loda

PS: oubie pas de cliquer sur réponse accepter si cela te convient.
<hr size="2" width="100%" />Se poser les bonnes questions est le premier pas pour trouver les bonnes réponses.
Messages postés
196
Date d'inscription
jeudi 22 février 2007
Statut
Membre
Dernière intervention
26 novembre 2009

j'ai esseyer avec ce code la mais il me dit la classe n'a pas de priorité par defaut au niveau de la ligne "pos (motcle,richedit1[i])<>0 "

procedure TForm1.FormCreate(Sender: TObject);
begin
richedit1.lines.loadfromfile('c:\c.txt');
motcle:='b';
X:=richedit1.lines.count;
panel1.caption:=inttostr(x);
end;


procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin
for i:=1 to x-1 do
if pos (motcle,richedit1[i])<>0 then
showmessage('cool');
end;


end.

merci ;)
Messages postés
470
Date d'inscription
vendredi 14 novembre 2003
Statut
Membre
Dernière intervention
23 octobre 2007
1
oui, enfin là tu pousse un peu je trouve, tu chercherais ne serait-ce qu'un peu ....



If AnsiPos(motclé, RichEdit1.Lines[i]) > 0 then
          begin
          showmessage('trouvé ligne: '+ i + ', voici la ligne : ' + RichEdit1.Lines[i]);
          end;

(non testé mais sa doit être ça)

++

bon coding

Fil

__________________________________________________
http://www.OgameTut.Free.Fr - Le site sur ogame de référence !
http://Signz.free.fr - Le gén&#

Salut,

Tu commences à devenir un ptit peu pénible alors tiens

procedure TForm1.Button1Click(Sender: TObject);
Var
i,j:cardinal;
begin
If not OpenDialog1.Execute then exit;
RichEdit1.Lines.LoadFromFile(OpenDialog1.FileName);
For i:=0 to RichEdit1.Lines.Count-1 DO
Begin
j:=Pos(Edit1.text,RichEdit1.Lines[i]);
If j>0 then
showmessage('Le mot est à la ligne '+IntToStr(i+1)+' et est le mot commence au '+IntToStr(j) +'caractère');
end;
end;

Ceci n'est pas optimisé (Majuscule/minuscule non distinguées) et il y a peut etre des beugs car non testé : tu n'auras pas mieux

Pas la peine de revenir à la chager
Messages postés
470
Date d'inscription
vendredi 14 novembre 2003
Statut
Membre
Dernière intervention
23 octobre 2007
1
Après re-lecture, je me suis rendu compte que ce n'était pas très clair. (il se fait tard désolé)

voila à quoi devrait ressembler ton code. ( je n'ai pas delphi sous main, et je ne me souvient plus vraiment de la syntaxe, ayant beaucoup codé en php récement.)

// charge le fichier
memo.lines.loadfromfile('mon fichier.txt');

$motclé = 'bob';

// ma boucle
for  ( $=0 ;  $i!=memo.lines.count ; $i++ ) {
 if ( ansipos( $motclé, memo.lines[$i])>0 )
     {
    // On affiche la ligne
    showmessage ('ligne $i :' . memo.lines[$i]);
    $trouver = 1; // voir plus bas
    break; // vu qu'on la trouvé on cherche plus, à toi de voir ;)
    }
}

// on sait jamais

if (!$trouver)
    {
    showmessage ('Ce fichier ne contient pas : $motclé');
    }

voilou, bon coding ;)

Fil

PS: désolé pour le double post

__________________________________________________
http://www.OgameTut.Free.Fr - Le site sur ogame de référence !
http://Signz.free.fr - Le gén&#
Messages postés
196
Date d'inscription
jeudi 22 février 2007
Statut
Membre
Dernière intervention
26 novembre 2009

j'ai delphi 6 donc je vai tester
merci ;)
Messages postés
196
Date d'inscription
jeudi 22 février 2007
Statut
Membre
Dernière intervention
26 novembre 2009

ca ne marche pas :(
quelqun peut me poster une source ?
merci d'avance
Messages postés
470
Date d'inscription
vendredi 14 novembre 2003
Statut
Membre
Dernière intervention
23 octobre 2007
1
       If AnsiPos('$motclé', RichEdit1.Lines[i]) > 0 then
          begin
          showmessage('trouvé ligne $i');
          end;

__________________________________________________
http://www.OgameTut.Free.Fr - Le site sur ogame de référence !
http://Signz.free.fr - Le gén&#
Messages postés
196
Date d'inscription
jeudi 22 février 2007
Statut
Membre
Dernière intervention
26 novembre 2009

je programme en delphi ;) 
Messages postés
196
Date d'inscription
jeudi 22 février 2007
Statut
Membre
Dernière intervention
26 novembre 2009

Comment parcourir le texte ligne par ligne et si le mot clé est trouver alors il affiche toute la ligne ???
Messages postés
196
Date d'inscription
jeudi 22 février 2007
Statut
Membre
Dernière intervention
26 novembre 2009

LoL merci bcp ;)