Problème avec Pos(S1, S2)

Signaler
Messages postés
3793
Date d'inscription
samedi 22 décembre 2007
Statut
Membre
Dernière intervention
3 juin 2016
-
Messages postés
4715
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
-
Bonjour, j'ai un petit problème avec la fonction Pos (pour trouver une sous-chaine dans une chaine).
En fait j'essaye de faire un nettoyeur de cookies, mais qui épargne certains cookies (par exemple ceux de DelphiFr ) avec une liste de mots. Exemple : dans la liste il y a le mot DelphiFr, et dans un cookie il y a DelphiFr (mais au milieu). Normalement, on ne devrait pas le supprimer, mais il le supprime quand meme :(
Quelqu'un saurait-il pourquoi la fonction pos ne marche pas avec moi? Voici ma propre fonction qui reprend Pos :

function ScanLign(Chaine, Mot: String): Boolean;
begin
     if Pos(Mot, Chaine) = 0 then Result := False else Result := True;
end;

Cordialement, Bacterius !

7 réponses

Messages postés
4715
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
12
Pos
fait la distinction majuscules/minuscules...
vérifie cette condition...

cantador
Messages postés
1717
Date d'inscription
vendredi 27 décembre 2002
Statut
Modérateur
Dernière intervention
23 juin 2020
3
function ScanLign(Chaine, Mot: String): Boolean;
begin
  Result := Pos(UpperCase(Mot), UpperCase(Chaine)) <> 0;
end;
Messages postés
3793
Date d'inscription
samedi 22 décembre 2007
Statut
Membre
Dernière intervention
3 juin 2016
8
Bonjour, j'ai essayé ta fonction Japee mais meme problème je pense que ca doit venir de mon code. En fait c'est ca :

if CheckListBox1.Checked[0] = True then for I : = 0 to FileListBox1.Items.Count - 1 do
          begin               for Z :0 to Form2.Mots.Items.Count - 1 do <gras>if ScanLign(FileListBox1.Items.Strings[I], Form2.Mots.Items.Strings[Z]) </gras> False thenif DeleteFile(FileListBox1.Directory + '\' + FileListBox1.Items.Strings[I]) = True then C : = C + 1;
          end;

Tout ca dans un timer ...
Si l'item 0 de la checkbox est activé alors pour chacun des cookies de la liste de fichiers, on regarde si on trouve un mot de la liste de "mots" (cookies à epargner) alors rien et si on ne le trouve pas alors on supprime.

Cordialement, Bacterius !
Messages postés
4715
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
12
Tout le code fonctionne bien mais il y a une erreur de logique :

Il faut déclencher l'évènement (la suppression) après avoir testé entièrement les deux boucles des deux chaînes.

cantador
Messages postés
3793
Date d'inscription
samedi 22 décembre 2007
Statut
Membre
Dernière intervention
3 juin 2016
8
Bonjour, il y a toujours un problème, ca ne marche toujours pas. Et je ne comprends pas ta remarque cantador ... je teste bien juste avant la suppression et si le mot n'est pas trouvé alors il ne supprime pas ... Pourrais-tu mieux m'expliquer s'il te plaît ? Ca supprime tous les cookies de la meme facon ...

Cordialement, Bacterius !
Messages postés
4715
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
12
et si on ne le trouve pas alors on supprime.







et si le mot n'est pas trouvé alors il ne supprime pas ..







Faudrait savoir ?

cantador
Messages postés
4715
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
12
par ailleurs j'ai re-testé le code et en fait celui fonctionne bien :
 
var
  Form1: TForm1;


implementation


{$R *.dfm}


function ScanLign(Chaine, Mot: string): Boolean;
begin
  Result := Pos(UpperCase(Mot), UpperCase(Chaine)) <> 0;
end;


procedure TForm1.Button1Click(Sender: TObject);
var
  i, z, c: integer;
begin
 c:= 0;
  for I := 0 to FileListBox1.Items.Count - 1 do
  begin
    for Z := 0 to Mots.Items.Count - 1 do
      if ScanLign(FileListBox1.Items.Strings[I], Mots.Items.Strings[Z]) = False then
        if DeleteFile(FileListBox1.Directory + '\' + FileListBox1.Items.Strings[I]) = True
          then C := C + 1;
  end;
ShowMessage(IntToStr(C) + ' Cookies supprimés');
end;


end.

nb: j'espère que tu initialises bien ton directory car sinon il prend par défaut le dossier du source de ton programme..

cantador