Recherche d'une sous-chaîne

Résolu
Inconnu Anonyme Messages postés 12 Date d'inscription lundi 16 mai 2005 Statut Membre Dernière intervention 19 juin 2005 - 19 juin 2005 à 20:11
Inconnu Anonyme Messages postés 12 Date d'inscription lundi 16 mai 2005 Statut Membre Dernière intervention 19 juin 2005 - 19 juin 2005 à 22:20
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

ni69 Messages postés 1418 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 5 juillet 2010 12
19 juin 2005 à 21:16
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 !




3
cedricbi Messages postés 185 Date d'inscription mercredi 18 décembre 2002 Statut Membre Dernière intervention 21 mars 2011
19 juin 2005 à 20:39
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 !
0
Inconnu Anonyme Messages postés 12 Date d'inscription lundi 16 mai 2005 Statut Membre Dernière intervention 19 juin 2005
19 juin 2005 à 20:45
Hmm , ca na pas l'air de marcher. Cela donne une erreur de classe d'exception
0
Inconnu Anonyme Messages postés 12 Date d'inscription lundi 16 mai 2005 Statut Membre Dernière intervention 19 juin 2005
19 juin 2005 à 22:20
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;
0
Rejoignez-nous