Recherche d'une sous-chaîne

Résolu
Signaler
Messages postés
12
Date d'inscription
lundi 16 mai 2005
Statut
Membre
Dernière intervention
19 juin 2005
-
Messages postés
12
Date d'inscription
lundi 16 mai 2005
Statut
Membre
Dernière intervention
19 juin 2005
-
Bonjour, petit prob avec ma procedure de recherche: mon inputbox apparait plusieurs fois.



procedure TForm1.Panom1Click(Sender: TObject);

var i : integer;

recherche : string;

begin

Memo1.Clear;

i := 1;

Recherche := Inputbox('Recherche sur le nom','Saisir le nom','');

while i <= 10 do //nombre maximale de personne dans mon tableau

begin

If POS(Recherche,Tab_personne[i].get_nom()) > 0 then

Panel2.Visible := true;

Memo1.Lines.Add(Tab_personne[i].get_nom());

i := i + 1;

end;



Je veux évité de faire une recherche intégrale ex: je cherche
"Alex". Il ne va pas me retourner "Alexi", "Alexandre", "Alex" etc.
mais seulement "Alex.

4 réponses

Messages postés
1418
Date d'inscription
samedi 12 juin 2004
Statut
Membre
Dernière intervention
5 juillet 2010
13
Que renvoie la requête getnom( ) ? Le prénom seul ou alors le nom de famille avec ?

Parce que si seul le prénom est renvoyé, alors on peut remplacer la ligne par

if Recherche = Tab_personne[i].get_nom() then [...]

Sinon, je ne vois pas d'autre moyen que celui proposé par cedricbi...



Autre chose, tu as dû oublier un begin/end dans ton code... Je te conseille aussi d'utiliser une boucle for :

procedure TForm1.Panom1Click(Sender: TObject);

var

i : integer;

recherche : string;

begin

Memo1.Clear;

i : = 1;

Recherche := Inputbox('Recherche sur le nom','Saisir le nom','');

for i : = 1 to 10 do

begin

If Pos(Recherche,Tab_personne[i].get_nom()) <> 0 then

begin

Panel2.Visible := true;

Memo1.Lines.Add(Tab_personne[i].get_nom());

end;

end;

end;


@+
Bonne Prog'
Nico [www.ni69.new.fr]
<hr size ="2" width="100%">





N'oubliez pas de cliquer sur Réponse acceptée lorsque la réponse vous convient !




Messages postés
185
Date d'inscription
mercredi 18 décembre 2002
Statut
Membre
Dernière intervention
21 mars 2011

Euh une solution très simple met qui marche pas à tous les coups au lieu de mettre 'Alex' tu mets 'Alex ' donc ca donne
If POS(Recherche + ' ',Tab_personne[i].get_nom()) > 0 then
Sinon il faut tester tous les caractères qui peuvent séparer 2 mots (Si ce n'est pas que des espaces !) !



<HR>

Le plus dur dans un programme c'est de savoir pourquoi il marche !
Messages postés
12
Date d'inscription
lundi 16 mai 2005
Statut
Membre
Dernière intervention
19 juin 2005

Hmm , ca na pas l'air de marcher. Cela donne une erreur de classe d'exception
Messages postés
12
Date d'inscription
lundi 16 mai 2005
Statut
Membre
Dernière intervention
19 juin 2005

Merci , ca repond en partie, mais j'ai trouvé mon erreur:



procedure TForm1.Panom1Click(Sender: TObject);

var i : integer;

recherche : string;

begin

Memo1.Clear;

i := 1;

Recherche := Inputbox('Recherche sur le nom','Saisir le nom','');

For i := 1 to nb_personne do

begin

If POS(Recherche + '',Tab_personne[i].get_nom) > 0 then

begin

Panel2.Visible := true;

Memo1.Lines.Add(Tab_personne[i].get_nom);

end;

end;

end;