String Search-Function in Listbox

Résolu
sarssor Messages postés 63 Date d'inscription dimanche 22 juillet 2007 Statut Membre Dernière intervention 28 avril 2011 - 18 févr. 2011 à 21:36
sarssor Messages postés 63 Date d'inscription dimanche 22 juillet 2007 Statut Membre Dernière intervention 28 avril 2011 - 20 févr. 2011 à 21:32
Salut

j ai teste cet code. sa marche mais il y a un Problème. le code peut trouver un seul String dans chaque ligne
Example: je voudrais charcher sur "a" (Position) dans un ListBox :

le code ne peut pas trouver toutes les Strings "a" dans chaque Ligne !
A voir également:

10 réponses

Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
20 févr. 2011 à 21:18
Le code est simplifié dans ce cas-là :

var
 I, J: Integer;
 S, S2: String;
begin
 ListBox2.Items.BeginUpdate;
 try
 ListBox2.Items.Clear; // vider la liste avant
 S2 := Uppercase(Edit1.Text); // mettre le texte à rechercher ici
 for I := 0 to ListBox1.Items.Count - 1 do
  begin
   S := Uppercase(ListBox1.Items.Strings[I]);
   // on parcourt la ligne actuelle en cherchant des occurrences de S2
   for J := 1 to Length(S) - Length(S2) + 1 do
    if Copy(S, J, Length(S2)) = S2 then ListBox2.Items.Add(Format('%d, %d', [I, J]));
  end;
 finally
  ListBox2.Items.EndUpdate;
 end;
end;


Devrait marcher mais pas testé. C'est plus logique en fin de compte. Comme toujours remplacer I par I + 1 dans le Format si les lignes doivent commencer à 1 et pas à 0. Mais tu comprends au moins ou tu ne fais que copier ce que je te donnes ?

Cordialement, Bacterius !
3
sarssor Messages postés 63 Date d'inscription dimanche 22 juillet 2007 Statut Membre Dernière intervention 28 avril 2011
18 févr. 2011 à 21:37
sorry. voila le code :
var
          i,p : Integer;
begin
          for i:=0 to ListBox1.Items.Count-1 do begin
              p := Pos(UpperCase(Edit1.Text),UpperCase(ListBox1.Items[i]));

              if p <> 0 then
                 ListBox2.Items.Add(Format('%d,%d',[i+1,p]));
          end;
0
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
19 févr. 2011 à 01:32
Salut,
normal il s'arrête au premier "a" rencontré pour chaque ligne ...

var
 I, J, P: Integer;
 S, S2: String;
begin
 S2 := Uppercase(Edit1.Text); // mettre le texte à rechercher ici
 for I := 0 to ListBox1.Items.Count - 1 do
  begin
   P := 0;
   S := Uppercase(ListBox1.Items.Strings[I]);
   // on parcourt la ligne actuelle en cherchant des occurrences de S2
   for J := 1 to Length(S) - Length(S2) + 1 do
    if Copy(S, J, Length(S2)) = S2 then Inc(P);

   // on affiche leur nombre si il y en a
   if P > 0 then ListBox2.Items.Add(Format('%d, %d',[I + 1, P]));
  end;
end;


Ca devrait marcher à priori, testé et approuvé.

Cordialement, Bacterius !
0
sarssor Messages postés 63 Date d'inscription dimanche 22 juillet 2007 Statut Membre Dernière intervention 28 avril 2011
19 févr. 2011 à 14:30
sa ne marche pas correct
voila le test:
0

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

Posez votre question
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
20 févr. 2011 à 02:24
Je vois pas le problème, il marche comme prévu, qu'est ce qui ne va pas ? Développe ton problème

Cordialement, Bacterius !
0
sarssor Messages postés 63 Date d'inscription dimanche 22 juillet 2007 Statut Membre Dernière intervention 28 avril 2011
20 févr. 2011 à 02:30
le problem je suis debutant
0
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
20 févr. 2011 à 02:38
Je crois avoir compris tu veux la position pas le nombre. Essaye peut-être ceci :

var
 I, J: Integer;
 S, S2, R: String;
begin
 S2 := Uppercase(Edit1.Text); // mettre le texte à rechercher ici
 for I := 0 to ListBox1.Items.Count - 1 do
  begin
   R := IntToStr(I) + ', '; // on met le numéro de la ligne d'abord
   S := Uppercase(ListBox1.Items.Strings[I]);
   // on parcourt la ligne actuelle en cherchant des occurrences de S2
   for J := 1 to Length(S) - Length(S2) + 1 do
    if Copy(S, J, Length(S2)) = S2 then R := R + IntToStr(J) + ', ';

   // on affiche leur nombre si il y en a
   ListBox2.Items.Add(Copy(R, 1, Length(R) - 2));
  end;
end;


Voici le résultat :



Cordialement, Bacterius !
0
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
20 févr. 2011 à 02:40
Corriger IntToStr(I) en IntToStr(I + 1) si tu veux que le numéro de la ligne commence à 1 et pas à 0.

Cordialement, Bacterius !
0
sarssor Messages postés 63 Date d'inscription dimanche 22 juillet 2007 Statut Membre Dernière intervention 28 avril 2011
20 févr. 2011 à 11:36
sa marche merci
je voudrais chaqu'un dans Ligne
alors:
0,1
0,5
...
et pas
0,1,5

Comment changer le code ?
0
sarssor Messages postés 63 Date d'inscription dimanche 22 juillet 2007 Statut Membre Dernière intervention 28 avril 2011
20 févr. 2011 à 21:32
sa marche tres bien

merci :)
0
Rejoignez-nous