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 :

Boucles et résultat final


Sujet :

Delphi

  1. #1
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut Boucles et résultat final
    Bonjour

    Je ne suis pas copain avec les boucles, depuis des heures je cherche comment obtenir ce résultat :
    A[$Secteur1]B A[$Secteur1-Secteur2]B A[$Secteur1-Secteur2-Secteur3]B

    Bref, le principe est d'entourer les expressions touche-à-touche par des sortes de tags.

    J'ai tenté d'extraire et de transposer le code d'origine, voici le résultat ci-dessous ; car bien plus long et complexe en réalité, mais en gros le principe est là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
       // StrUtils en Uses pour AnsiReplaceText() 
    procedure TForm1.Button1Click(Sender: TObject);
    var
      long: integer;
      txt, mot, mot1, sLigne, sFinal: string;
    begin
      sFinal := '';
      Ligne.Text := '$Secteur1   $Secteur1-Secteur2   $Secteur1-Secteur2-Secteur3';
      sLigne := Ligne.Text;
      txt := sLigne;
     
      while pos ('  ', txt) > 0 do
            delete (txt, pos ('  ', txt), 1);
     
      while length (txt) > 0 do begin
            long := pos (' ', txt);
     
            if long = 0 then
            long := length (txt) + 1;
            mot := Copy(txt, 1, long - 1);
     
            if Pos('Secteur', sLigne) > 0 then
            begin
               if pos(AnsiLowerCase('£'), AnsiLowerCase(mot)) > 0 then
               else
     
               if pos(AnsiLowerCase('#'), AnsiLowerCase(mot)) > 0 then
               else
     
               if pos(AnsiLowerCase('%'),  AnsiLowerCase(mot)) > 0 then
               else
     
               begin
     
                 mot1 := 'A[' + mot + ']B ';
     
               //----------------- Dessous que ça foire...
                 sFinal := AnsiReplaceText(sLigne, mot, mot1);
     
    // Pourtant le ShowMessage me donne exactement le résultat escompté :
    ShowMessage('Variable mot1 : '+mot1);
               //-----------------------------------
               end;
            end;
            delete (txt, 1, long);
        end;
         Ligne.Text := sFinal;
    end;
    J'ai tenté bien des manips, mais les boucles ne m'aiment pas

    Je ne sais pas si je suis clair sur ce coup là, sinon demandez

    Un grand merci d'avance si vous trouvez la solution.

  2. #2
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut

    Remplace cette ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sFinal := AnsiReplaceText(sLigne, mot, mot1);
    par celle-ci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sFinal := sFinal + mot1;
    Pour voir !

    @+ Claudius

  3. #3
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    Cl@udius... si tu étais une nana, je te sauterais au cou !

    Purée, le temps que j'ai passé là-dessus, et toi en un coup de pelle à tarte, tu trouves la seule lution.

    J'ai vérifié dans le code source d'origine et c'est du nickel chrôme

    et

  4. #4
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    Arffff !

    Hé oui, mais en ajoutant par exemple un Toto entres ces paramètres ; ça l'ignore et l'écrase proprement.

    J'en sautais au plafond

    Par un autre moyen j'avais déjà trouvé un moyen similaire, mais lors de test en ajoutant des libellés autres entre...

    La difficulté consiste à intégrer le sLigne qui contient la totalité du texte de ligne.

    @ + donc et @ suivre

  5. #5
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Citation Envoyé par Droïde Système7 Voir le message
    ... mais en ajoutant par exemple un Toto entres ces paramètres ; ça l'ignore et l'écrase proprement.
    J'ai du mal à te suivre. Tu as un exemple plus explicite ?

    @+

  6. #6
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    Re Cl@udius,

    Pardonne-moi, pas facile de bien expliquer du premier coup, j'ai tenté de simplifier au max. Mais j'ai oublié de dire, qu'il existe aussi des "mots" autres au milieu - ou ailleurs - des paramètres en question commençants pas "$".

    Pas de panique je donne un autre exemple :
    $Secteur1....$Secteur1-Secteur2....Toto.... $Secteur1-Secteur2-Secteur3

    Ce qui devrait donner après traitement des boucles :
    A[$Secteur1]B....A[$Secteur1-Secteur2]B...Toto.... A[$Secteur1-Secteur2-Secteur3]B.

    Encore un autre exemple :
    $Secteur1-Secteur2-Secteur3-Secteur4 ....Auguste....$Secteur1 ....Antoine....$Secteur1-Secteur2-Secteur3-Secteur4-Secteur5 B]....Marie

    Ce qui devrait donner après traitement :
    A[$Secteur1-Secteur2-Secteur3-Secteur4]B.... Auguste....A[$Secteur1]B.... Antoine.... A[$Secteur1-Secteur2-Secteur3-Secteur4-Secteur5]B....Marie

    Ne pas tenir compte des pointillés, ils sont seulement là pour mieux présenter le but recherché. Sinon ils n'existent pas.

    Toujours le principe de placer un "A[" au début de chaque bloc/paramètre de détection $, et en fin d'ajouter un "]B".

    Sans oublier de laisser - par exemple - des Toto, Riri entre, bref tout ce qui ne commence pas par "$" doit être visible, mais sans traitement particulier.

    Tu vois, si j'avais expliqué tout ça au début, tout le monde déboulerait ailleurs

    Merci @+

    PS : aller, un autre exemple pour le fun hyper basique pour mieux cerner et expliquer :
    $rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr....Hello....$hhhhh....Toto....$aaaaaaa....$uuuuuuuuuuuu
    Ce qui devrait donner après traitement :
    A[$rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr]B....Hello....A[$hhhhh]B....Toto....A[$aaaaaaa]B....A[$uuuuuuuuuuuu]B
    (Ne pas tenir compte des pointillés ; c'est pour mieux distinguer les espaces)
    Toujours le même principe/algo : j'entoure tout les blocs sans space à l'aide de balises et si des mots se promènent dans ce string sans le tag =>$, hé bien je les laisse sans traitement, mais ils restent...

    Edit : Je viens de me rendre compte sur la maquette en code simplifié donné ci-dessus + la modif à Cl@udius, que contrairement à ce que j'ai écrit un peu plus haut ; ça n'écrase pas les libéllés entre les paramètres. Mais ça ajoute les tags autour. Comment ne pas ajouter les tags sur les libellés autres que ceux en paramètres ?...

  7. #7
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 771
    Points
    2 771
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    Function Remplace:string;
    var
      I: integer;
      b:boolean;
      Text,s, sFinal: string;
    begin
      Text := '$Secteur1   $Secteur1-Secteur2   $Secteur1-Secteur2-Secteur3';
      s := trim(Text);// pour enlever les espaces au début et à la fin
      sFinal := '';
      b:=false;
      for i:=1 to length(s) do
        begin
            case s[i] of
             '$':
              begin
               sfinal:=sfinal+'A[';
               b:=true;
              end;
              ' ':if b then
                   begin
                    sfinal:=sfinal+']B';
                    b:=false;
                   end;
             end;
            if s[i]<>' ' then sfinal:=sfinal+s[i];
        end;
       if b then sfinal:=sfinal+']B';
       Result := sFinal;
     
    end;
    à tester

  8. #8
    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,

    Citation Envoyé par edam Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    Function Remplace:string;
    var
      I: integer;
      b:boolean;
      Text,s, sFinal: string;
    begin
      Text := '$Secteur1   $Secteur1-Secteur2   $Secteur1-Secteur2-Secteur3';
      s := trim(Text);// pour enlever les espaces au début et à la fin
      sFinal := '';
      b:=false;
      for i:=1 to length(s) do
        begin
            case s[i] of
             '$':
              begin
               sfinal:=sfinal+'A[';
               b:=true;
              end;
              ' ':if b then
                   begin
                    sfinal:=sfinal+']B';
                    b:=false;
                   end;
             end;
            if s[i]<>' ' then sfinal:=sfinal+s[i];
        end;
       if b then sfinal:=sfinal+']B';
       Result := sFinal;
     
    end;
    à tester
    Ca fonctionne d'après mes tests Edam

    Par contre, je verrai plus ça comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    Function Remplace(const Text:string):string;
    var
      I: integer;
      b:boolean;
      s,sFinal: string;
    begin
      s := trim(Text);// pour enlever les espaces au début et à la fin
      sFinal := '';
      b:=false;
      for i:=1 to length(s) do
        begin
            case s[i] of
             '$':
              begin
               sfinal:=sfinal+'A[';
               b:=true;
              end;
              ' ':if b then
                   begin
                    sfinal:=sfinal+']B';
                    b:=false;
                   end;
             end;
            if s[i]<>' ' then sfinal:=sfinal+s[i];
        end;
       if b then sfinal:=sfinal+']B';
       Result := sFinal;
    end;
    Voilà (c'était pour ajouter mon grain de sel )
    A+

  9. #9
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    hé les gars, si vous croyez vous en tirer comme ça !

    Du grand art

    Une fonction sur-mesure en plus

    Seulement pour vous empêcher de trop vous redresser de fierté, un tout petit détail de rien du tout, mais encore de ma faute ; j'ai trop mal expliqué

    Je n'ai plus du tout d'espace entre les expressions.

    Ça donne par exemple :
    A[$Secteur1]BGILBERTA[$Secteur1-Secteur2]BARTHURA[$Secteur1-Secteur2-Secteur3]B

    Alors j'ai ajouté un espace en : ' A]' et aussi un en 'B[ ' afin que ça donne :
    A[$Secteur1]B GILBERT A[$Secteur1-Secteur2]B ARTHUR A[$Secteur1-Secteur2-Secteur3]B

    Donc j'ajoute des espaces, mais par répercussion en début de ligne il en est ajouté un également.

    Bon, ça je crois que je vais facilement, les doigts dans le nez, pouvoir m'en débrouiller

    Un grand et à vous trois, chapeau !

  10. #10
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 771
    Points
    2 771
    Par défaut
    simple, enleve

  11. #11
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    En attendant, j'avais ajouté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Result := Trim(sFinal);
    tout au dessous du code.

    Merci encore

    Bonne nuit !

    @+

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

Discussions similaires

  1. Aperçu de Jpanel différent du résultat final
    Par ryu20 dans le forum NetBeans Platform
    Réponses: 4
    Dernier message: 26/08/2009, 10h11
  2. Réponses: 1
    Dernier message: 12/11/2008, 10h45
  3. Afficher une page d'attente avant d'afficher le résultat final
    Par Ghislain dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 19/10/2007, 15h44
  4. Réponses: 2
    Dernier message: 25/04/2007, 20h55
  5. Réponses: 2
    Dernier message: 10/02/2007, 05h52

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