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

 Delphi Discussion :

Remplacement de chaine dans un string


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Par défaut Remplacement de chaine dans un string
    Bonjour à tous,

    J'ai besoin d'un coup de main.
    Comment intervertire 2 chaines à l'interieur d'une même chaine.

    Chaine de départ :
    "FC000040411010000121208Fact FC000040 test Test test 01 35,88 0,00"

    j'aimerais intervertire dans cette chaine
    la chaine 1 : " 35,88"
    avec la chaine 2 : " 0,00"

    Je sais précisement où se trouve ces deux chaines
    chaine 1 : commence à 84 et fait 20 caracteres de long
    chaine 2 : commence à 104 et fait 20 caracteres de long

    Pour obtenir ce résultat :
    "FC000040411010000121208Fact FC000040 test Test test 01 0,00 35,88"

    Je cherche encore mais j'ai pas trouvé.

    Je ne peux pas utiliser StringReplace car la valeur de chaine 1 et chaine 2 change à chaque string, seul 84,20 ne change pas.

    Merci pour vos lumière.

  2. #2
    Membre très actif
    Inscrit en
    Janvier 2009
    Messages
    598
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 598
    Par défaut
    1) mettre dans la variable "partie1" la sous-chaine commençant à la position N de la chaine.

    2) mettre dans la variable "partie2" la sous-chaine commençant à la position M de la chaine.

    3) Mettre la variable "partie1" à la place de la chaine se trouvant en position M de la chaine.

    4) Mettre la variable "partie2" à la place de la chaine se trouvant en position N de la chaine.

  3. #3
    Membre éclairé

    Inscrit en
    Novembre 2002
    Messages
    815
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 815
    Par défaut
    salut

    par exemple comme ça..
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    function TForm1.permute(st:string):string;
    var temp:string;
        deb,fin:integer;
    begin
        result:='';
        deb:=55;  // debut de la 1er chaine
        fin:=6;     // fin de la 1er chaine
        temp:=copy(st,deb,fin);
        delete(st,deb,fin);
        result:=st+temp;
    end;
    Avec ta ligne exemple tes valeurs ne marche pas, j'ai pris 55 et 6
    chaine 1 : commence à 84 et fait 20 caracteres de long

    bye

  4. #4
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Par défaut
    Merci de vos reponsés.

    Impossble d'utiliser ta proposition, car je ne pourrais pas faire la deuxième permutation qui se trouve sur la même ligne ?

    si je remplace "32,88" par "0,00"
    et ensuite "0,00" par "32,88"
    attention dans le même string
    Lors du premier remplacement le nouveau string à 2 fois "0,00" et donc il me remplacera ensuite le premier "0,00" par "32,88"..

    je reviens au départ...

    Voilà ce que j'ai fais, mais vous aller rire j'arrice pas à faire marcher Lenght()

    ptr...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    ..
    ..
    // Chaine1 devient chaine2 et vice et versa...
    // Ligne est à ma ligne de string.
     
      Chaine1 := AnsiMidStr(Ligne,84,20);
      Chaine2 := AnsiMidStr(Ligne,104,20);
      Ligne := AnsiMidStr(Ligne,0,83)+Chaine2 +Chaine1 +AnsiMidStr(Ligne,124,1254); // 1254 car Lenght(Ligne) marche pas !!!!
     
    ..
    ..

  5. #5
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 491
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 491
    Par défaut
    salut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      ChaineRoot := Copy(Ligne,1,84);
      Chaine1 := Copy(Ligne,84,20);
      Chaine2 := Copy(Ligne,104,20);
      ChaineFin := Copy(Ligne,124,length(Ligne)-124);
      Ligne :=   ChaineRoot+Chaine2+Chaine1+ChaineFin;


    @+ Phil

  6. #6
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 937
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 937
    Par défaut
    Encore une autre proposition

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function Permute(aValue :string) :string;
    begin
      SetLength(Result, 124);
      Move(aValue[1],   Result[1],   83);
      Move(aValue[104], Result[84],  20);
      Move(aValue[84],  Result[104], 20);
    end;

  7. #7
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Par défaut
    Merci encore AndNotOr


  8. #8
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 937
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 937
    Par défaut
    Pas de problème, c'est un plaisir

    Je n'ai pas eu trop le temps de m'occuper de ton code complet, mais essaie encore de simplifier les AnsiMidStr() appelé entre 2 et 4 fois par boucle... Et ensuite pourquoi pas ramener toute la procédure de traitement dans la boucle principale.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VBA][Acces 2000]Remplacer une chaine dans un txt
    Par JulienTough dans le forum VBA Access
    Réponses: 5
    Dernier message: 17/07/2007, 09h58
  2. remplacer une lettre dans une String
    Par NicoO_O dans le forum Langage
    Réponses: 3
    Dernier message: 12/04/2007, 09h49
  3. [RegEx] Remplacer des caractères dans une string
    Par jexl dans le forum Langage
    Réponses: 2
    Dernier message: 15/03/2007, 22h26
  4. [XSLT] remplacement de chaine dans un fichier XML
    Par Eldarion dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 11/07/2006, 13h30
  5. Rechercher remplacer une chaine dans 150 procs.
    Par gregco1 dans le forum Oracle
    Réponses: 8
    Dernier message: 14/06/2006, 17h39

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