IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Delphi Discussion :

Problème avec la fonction AnsiReplaceStr.


Sujet :

Langage Delphi

  1. #1
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 388
    Points : 19 811
    Points
    19 811
    Billets dans le blog
    66
    Par défaut Problème avec la fonction AnsiReplaceStr.
    Bonjour tout le monde,

    j'ai un probleme avec la fonction AnsiReplaceStr:

    voici un bout de code pour illustrer:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if (PosEx(SubChaine,Chaine) <> 0) then
    begin
    ...
    Chaine=AnsiReplaceStr(Chaine,SubChaine,'hello');
    end;
    quand je trace ce code avec le debugger je m'apercois que par moment quand il trouve la SubChaine dans la Chaine (PosEx<>0), il execute bien la fonction AnsiReplaceStr, mais il ne change rien a la Chaine, comme si la fonction Replace ne faisait rien ou comme si il ne trouvait pas la SubChaine dans la Chaine...

    merci pour votre aide,

    User

  2. #2
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Salut,

    J'ai essayé ça chez moi, et ça fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    procedure TForm1.Button1Click(Sender: TObject);
    var
      Chaine,SubChaine:string;
    begin
      Chaine:='La phrase contient bonjour';
      SubChaine:='bonjour';
      if (PosEx(SubChaine,Chaine) <> 0) then
      begin
        Chaine:=AnsiReplaceStr(Chaine,SubChaine,'hello');
      end;
      ShowMessage(Chaine);
    end;
    Il faut attention à bien respecter la casse avec PosEx et AnsiReplaceStr. Pour ne pas avoir de soucis avec la casse, utilise LowerCase avec PosEx :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (PosEx(LowerCase(SubChaine),LowerCase(Chaine)) <> 0) then
    Voilà!
    J'espère que l'affaire sera résolue


  3. #3
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 388
    Points : 19 811
    Points
    19 811
    Billets dans le blog
    66
    Par défaut
    Salut à toi !

    Je manipule des chaines de caractères assez énorme, en fait je m'amuse à faire un petit programme de compression de données...

    Je copie le contenue d'un fichier texte (par exemple) de 100ko dans une chaine,

    je parcours la chaine et je remplace les sous chaines qui se ressemble par des sous chaines plus petites...

    je fais plusieurs passages,

    le programme fonctionne parfaitement bien pour les fichiers inférieurs à 100ko, mais dès que ca dépasse 100ko ca boucle sans fin a cause de AnsiReplaceStr,

    je l'ai donc remplacé par:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function ReplaceStr(s,src,dest: string): string;
    var l,p: integer;
    begin
      l:=length(src);
      repeat
        p:=pos(src,s);
        if p>0 then s:=copy(s,1,p-1)+dest+copy(s,p+l,length(s));
      until p=0;
      result:=s;
    end;
    code de Pascal Jankowski publié sur ce même site..

    et la ca marche bien !

    le seul problème c'est que c'est lent...

    alors je souhaiterai optimiser ce code...

    Merci à vous !

Discussions similaires

  1. Problème avec une fonction date.
    Par kmayoyota dans le forum ASP
    Réponses: 8
    Dernier message: 09/09/2004, 12h33
  2. Problème avec la fonction findfirst ()
    Par Angelico dans le forum Windows
    Réponses: 3
    Dernier message: 05/08/2004, 20h40
  3. [Requete SQL en VBA] Problème avec la fonction FLOOR
    Par zubral dans le forum Langage SQL
    Réponses: 4
    Dernier message: 13/07/2004, 13h24
  4. Problème avec les fonctions
    Par jvachez dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 13/01/2004, 12h06
  5. [Postgresql]Problème avec les fonctions ...
    Par fet dans le forum Requêtes
    Réponses: 4
    Dernier message: 02/10/2003, 09h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo