Recherche dans un fichier text

Résolu
hardouz Messages postés 196 Date d'inscription jeudi 22 février 2007 Statut Membre Dernière intervention 26 novembre 2009 - 15 mars 2007 à 22:47
hardouz Messages postés 196 Date d'inscription jeudi 22 février 2007 Statut Membre Dernière intervention 26 novembre 2009 - 19 mars 2007 à 02:30
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

Filipe35 Messages postés 470 Date d'inscription vendredi 14 novembre 2003 Statut Membre Dernière intervention 23 octobre 2007 1
16 mars 2007 à 01:28
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&#
3
cs_Loda Messages postés 814 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 30 juillet 2009 3
16 mars 2007 à 09:26
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.
3
hardouz Messages postés 196 Date d'inscription jeudi 22 février 2007 Statut Membre Dernière intervention 26 novembre 2009
18 mars 2007 à 00:03
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 ;)
3
Filipe35 Messages postés 470 Date d'inscription vendredi 14 novembre 2003 Statut Membre Dernière intervention 23 octobre 2007 1
18 mars 2007 à 16:14
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&#
3

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
19 mars 2007 à 02:27
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
3
Filipe35 Messages postés 470 Date d'inscription vendredi 14 novembre 2003 Statut Membre Dernière intervention 23 octobre 2007 1
16 mars 2007 à 01:37
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&#
0
hardouz Messages postés 196 Date d'inscription jeudi 22 février 2007 Statut Membre Dernière intervention 26 novembre 2009
17 mars 2007 à 09:28
j'ai delphi 6 donc je vai tester
merci ;)
0
hardouz Messages postés 196 Date d'inscription jeudi 22 février 2007 Statut Membre Dernière intervention 26 novembre 2009
17 mars 2007 à 22:17
ca ne marche pas :(
quelqun peut me poster une source ?
merci d'avance
0
Filipe35 Messages postés 470 Date d'inscription vendredi 14 novembre 2003 Statut Membre Dernière intervention 23 octobre 2007 1
18 mars 2007 à 13:37
       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&#
0
hardouz Messages postés 196 Date d'inscription jeudi 22 février 2007 Statut Membre Dernière intervention 26 novembre 2009
18 mars 2007 à 15:49
je programme en delphi ;) 
0
hardouz Messages postés 196 Date d'inscription jeudi 22 février 2007 Statut Membre Dernière intervention 26 novembre 2009
18 mars 2007 à 15:56
Comment parcourir le texte ligne par ligne et si le mot clé est trouver alors il affiche toute la ligne ???
0
hardouz Messages postés 196 Date d'inscription jeudi 22 février 2007 Statut Membre Dernière intervention 26 novembre 2009
19 mars 2007 à 02:30
LoL merci bcp ;)
0