Recherche dans un fichier text [Résolu]

hardouz 199 Messages postés jeudi 22 février 2007Date d'inscription 26 novembre 2009 Dernière intervention - 15 mars 2007 à 22:47 - Dernière réponse : hardouz 199 Messages postés jeudi 22 février 2007Date d'inscription 26 novembre 2009 Dernière intervention
- 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 ;)
Afficher la suite 

12 réponses

Répondre au sujet
Filipe35 496 Messages postés vendredi 14 novembre 2003Date d'inscription 23 octobre 2007 Dernière intervention - 16 mars 2007 à 01:28
+3
Utile
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&#
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Filipe35
cs_Loda 900 Messages postés vendredi 3 novembre 2000Date d'inscription 30 juillet 2009 Dernière intervention - 16 mars 2007 à 09:26
+3
Utile
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.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_Loda
hardouz 199 Messages postés jeudi 22 février 2007Date d'inscription 26 novembre 2009 Dernière intervention - 18 mars 2007 à 00:03
+3
Utile
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 ;)
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de hardouz
Filipe35 496 Messages postés vendredi 14 novembre 2003Date d'inscription 23 octobre 2007 Dernière intervention - 18 mars 2007 à 16:14
+3
Utile
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&#
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Filipe35
Utilisateur anonyme - 19 mars 2007 à 02:27
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Utilisateur anonyme
Filipe35 496 Messages postés vendredi 14 novembre 2003Date d'inscription 23 octobre 2007 Dernière intervention - 16 mars 2007 à 01:37
0
Utile
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&#
Commenter la réponse de Filipe35
hardouz 199 Messages postés jeudi 22 février 2007Date d'inscription 26 novembre 2009 Dernière intervention - 17 mars 2007 à 09:28
0
Utile
j'ai delphi 6 donc je vai tester
merci ;)
Commenter la réponse de hardouz
hardouz 199 Messages postés jeudi 22 février 2007Date d'inscription 26 novembre 2009 Dernière intervention - 17 mars 2007 à 22:17
0
Utile
ca ne marche pas :(
quelqun peut me poster une source ?
merci d'avance
Commenter la réponse de hardouz
Filipe35 496 Messages postés vendredi 14 novembre 2003Date d'inscription 23 octobre 2007 Dernière intervention - 18 mars 2007 à 13:37
0
Utile
       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&#
Commenter la réponse de Filipe35
hardouz 199 Messages postés jeudi 22 février 2007Date d'inscription 26 novembre 2009 Dernière intervention - 18 mars 2007 à 15:49
0
Utile
je programme en delphi ;) 
Commenter la réponse de hardouz
hardouz 199 Messages postés jeudi 22 février 2007Date d'inscription 26 novembre 2009 Dernière intervention - 18 mars 2007 à 15:56
0
Utile
Comment parcourir le texte ligne par ligne et si le mot clé est trouver alors il affiche toute la ligne ???
Commenter la réponse de hardouz
hardouz 199 Messages postés jeudi 22 février 2007Date d'inscription 26 novembre 2009 Dernière intervention - 19 mars 2007 à 02:30
0
Utile
LoL merci bcp ;)
Commenter la réponse de hardouz

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.