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

Discussion :

Remplacement de sous-chaines

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 51
    Points : 34
    Points
    34
    Par défaut Remplacement de sous-chaines
    Bonjour,
    Ce post aurait peut-être sa place dans une section algorithmique, mais bon... je suis sous Qt alors... Voici ma question:

    J'ai une List<champs> appelée listeChamp où chaque champ contient un "int" de début et un "int" de longueur.

    Je voudrais trouver l'algorithme le plus simple pour remplacer tous ces champs à l'intérieur d'une QString.

    Voici où j'en suis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    foreach(Champ C, listeChamps){
         QString newChamp = "xxxxx";
     
         QString newLine = ligne.mid(0,C.getDebut()) + newChamp + ligne.mid(C.getDebut() + C.getLongueur());
     
    }
    Sauf que ça marche pour le premier mais après ça va bugger si le deuxième champ est situé après le premier (le "int" de début n'est plus bon)...

    J'espère avoir été clair...

    Merci d'avance pour toute idée !

  2. #2
    Expert confirmé
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Points : 4 182
    Points
    4 182
    Par défaut
    Il ne faut pas modifier la chaîne d'origine et plutôt construire le résultat dans une chaîne à part.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 51
    Points : 34
    Points
    34
    Par défaut
    Merci pour ta réponse.

    C'est ce que j'ai essayé de faire :

    newLine = nouvelle ligne construite à partir de ligne (ancienne ligne).

    Si on considère que j'ai 2 champs, une QString formée de 5 segments (A,B,C,D,E) et que les 2 champs doivent remplacer les segments B et D, voici ce que ça devrait donner à chaque itération :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Ligne d'origine
      A   B   C   D   E
    |---|---|---|---|---|
     
      A   B     C   D   E
    |---|xxxxxx|---|---|---|
     
      A   B     C   D      E
    |---|xxxxxx|---|xxxxxxx|---|
    Le problème est qu'à la deuxième itération, les segments C,D,E sont décalés et le "int" debut du 2eme champ n'est plus bon.

  4. #4
    Expert confirmé
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Points : 4 182
    Points
    4 182
    Par défaut
    À chaque itération, il faut récupérer l'information depuis la chaîne d'origine (où les indices sont pertinents).

    La chaîne de sortie est utilisée en écriture uniquement, ça ressemblerait plutôt à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    |---|???????????????????????
     
    |---|xxxxxx|????????????????
     
    |---|xxxxxx|---|????????????
     
    |---|xxxxxx|---|xxxxxxx|????

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 51
    Points : 34
    Points
    34
    Par défaut
    Oui, en fait la premiere étape est de trier les champ par ordre croissant de 'début'.
    Bon a priori, y a pas de fonction toute faite...
    Je vais y réfléchir

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 51
    Points : 34
    Points
    34
    Par défaut
    Donc voici ou j'en suis :

    j'ai implémenté une fonction de tri de la QList et voici ce que ça donne (je le met pour ceux que ça intéresse) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    foreach(Champ C, listeChamps){
        QString newChamp = "xxxxx";
     
        newLine += newChamp ;
     
        if(i<listeChamps.length()) {newLine += ligne.mid(C.getDeb()+C.getLong()-1,listeChamps.at(i).getDeb() - (C.getDeb()+C.getLong()));}
        if(i==listeChamps.length()) {newLine += ligne.mid(C.getDeb()+C.getLong()-1);}
        i++;
    }

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

Discussions similaires

  1. [VB] lire lignes d'un fichier et remplacer une sous chaine
    Par horzy dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 04/06/2007, 20h58
  2. Réponses: 3
    Dernier message: 13/01/2007, 14h05
  3. Réponses: 3
    Dernier message: 05/01/2007, 15h50
  4. Remplacement de sous-chaines
    Par Beuss dans le forum API standards et tierces
    Réponses: 8
    Dernier message: 02/10/2006, 07h38
  5. [Chaines] Remplacement de sous chaine simple
    Par Clorish dans le forum Delphi
    Réponses: 3
    Dernier message: 28/09/2006, 13h21

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