1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    mai 2015
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2015
    Messages : 89
    Points : 49
    Points
    49

    Par défaut Programme pour supprimer les mots contenant la lettre "i"

    Bonjour, je suis actuellement en apprentissage hier dans le code Pascal
    Je voudrai élaborer un programe qui me permet de supprimer tout les mots contenant la lettre "i" en cliquant sur un bouton
    Pouvez-vous m'aidez s'il vous plaît
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    procedure TFPrincipal.btnDisparitionClick(Sender: TObject);
     
    begin
     
    //Code Suppression de la lettre i
    end;

  2. #2
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    décembre 2011
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : décembre 2011
    Messages : 2 974
    Points : 10 674
    Points
    10 674
    Billets dans le blog
    4

    Par défaut

    Bonjour !

    Les supprimer où ça ? Donnez-nous un extrait de code un peu plus complet.

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    mai 2015
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2015
    Messages : 89
    Points : 49
    Points
    49

    Par défaut

    Citation Envoyé par Roland Chastain Voir le message
    Bonjour !

    Les supprimer où ça ? Donnez-nous un extrait de code un peu plus complet.
    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    unit principal;
     
    {$mode objfpc}{$H+}
     
    interface
     
    uses
      Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, Buttons,
      ExtCtrls, StdCtrls;
     
    type
     
      { TFPrincipal }
     
      TFPrincipal = class(TForm)
        btnAjouter: TButton;
        btnSupprimer: TButton;
        btnSauvegarder: TButton;
        btnCharger: TButton;
        btnEffacer: TButton;
        btnDisparition: TButton;
        edtMot: TEdit;
        lblMot: TLabel;
        lblElements: TLabel;
        lbxList: TListBox;
        procedure btnAjouterClick(Sender: TObject);
        procedure btnChargerClick(Sender: TObject);
        procedure btnDisparitionClick(Sender: TObject);
        procedure btnEffacerClick(Sender: TObject);
        procedure btnSauvegarderClick(Sender: TObject);
        procedure btnSupprimerClick(Sender: TObject);
     
      private
        { private declarations }
      public
        { public declarations }
      end;
     
    var
      FPrincipal: TFPrincipal;
     
    implementation
     
    {$R *.lfm}
     
    { TFPrincipal }
    procedure TFPrincipal.btnAjouterClick(Sender: TObject);
    begin
    lbxList.Items.Add(UpperCase(edtMot.Text));
    lbxList.Sorted:=True;
    end;
     
    procedure TFPrincipal.btnChargerClick(Sender: TObject);
    begin
      lbxList.Items.LoadFromFile('liste.txt');
    end;
     
    procedure TFPrincipal.btnDisparitionClick(Sender: TObject);
    begin
     lbxList.Items.Delete(lbxList.Items.IndexOf('i'));
    end;
     
    procedure TFPrincipal.btnEffacerClick(Sender: TObject);
     var
       i: integer;
     begin
       if lbxList.SelCount > 0 then begin
     
     
         For i := lbxList.Items.Count - 1 downto 0 do
     
           if lbxList.Selected [i] then
     
             lbxList.Items.Delete (i);
     
       end else begin
           ShowMessage('Selectionnez un élément!');
     
       end;
     end;
     
    procedure TFPrincipal.btnSauvegarderClick(Sender: TObject);
    begin
      lbxList.Items.SaveToFile('liste.txt');
    end;
     
    procedure TFPrincipal.btnSupprimerClick(Sender: TObject);
    begin
     edtMot.Clear;
    end;
     
    end.

  4. #4
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    décembre 2011
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : décembre 2011
    Messages : 2 974
    Points : 10 674
    Points
    10 674
    Billets dans le blog
    4

    Par défaut

    L'expression IndexOf('i') renverra l'index de la chaîne 'i', si elle existe. Ce n'est donc pas ce qu'il vous faut.

    Pour savoir si une chaîne de la liste contient la sous-chaîne 'i' (qui en l'occurrence est un simple caractère), il suffit de vérifier si Pos('i', chaine) > 0.

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    mai 2015
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2015
    Messages : 89
    Points : 49
    Points
    49

    Par défaut

    Citation Envoyé par Roland Chastain Voir le message
    L'expression IndexOf('i') renverra l'index de la chaîne 'i', si elle existe. Ce n'est donc pas ce qu'il vous faut.

    Pour savoir si une chaîne de la liste contient la sous-chaîne 'i' (qui en l'occurrence est un simple caractère), il suffit de vérifier si Pos('i', chaine) > 0.
    Merci de votre réponse, quand je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lbxList.Items.Delete(lbxList.Items.Pos('i', chaine) > 0);
    il me le surligne la ligne en rouge et n'exécute pas le programme pouvez vous me venir en aide s'il vous plaît ?

  6. #6
    Responsable Delphi

    Avatar de gvasseur58
    Homme Profil pro
    Cultivateur de code (bio)
    Inscrit en
    février 2013
    Messages
    1 015
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Cultivateur de code (bio)
    Secteur : Enseignement

    Informations forums :
    Inscription : février 2013
    Messages : 1 015
    Points : 11 920
    Points
    11 920
    Billets dans le blog
    33

    Par défaut

    Citation Envoyé par LerikalBless Voir le message
    Merci de votre réponse, quand je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lbxList.Items.Delete(lbxList.Items.Pos('i', chaine) > 0);
    il me le surligne la ligne en rouge et n'exécute pas le programme pouvez vous me venir en aide s'il vous plaît ?
    Bonsoir,

    Le soulignement est normal puisque vous mélangez plusieurs instructions dans un concentré qui n'a plus de sens
    Le principe du travail est celui-ci :
    * tant que la liste contient des éléments
    * je lis un élément ;
    * je vérifie s'il contient un 'i' ;
    * si tel est le cas, je supprime l'élément ;
    * je passe à l'élément suivant.

    L'intérieur de la boucle pourrait ressembler à ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    // J est le compteur de la boucle de lbxList.Items.Count - 1 à 0
    // J'ai choisi J pour bien marquer la différence avec le caractère cherché qui est 'i'.
    if Pos('i', lbxList.Items.Strings[J]) > 0 then // code de Roland : y a-t-il un 'i' dans la chaîne en cours ? - vaut True si la comparaison est vérifiée
      lbxList.Items.Delete(J); // si oui je le supprime
    Attention à la boucle : il faut commencer par la fin de la liste et décrémenté le compteur (de lbxList.Items.Count - 1 à 0) : sinon, à chaque suppression, la liste est diminuée d'un élément à partir du début et le compteur devient faux !

    Bon courage,

    Gilles
    Accès à mon site et à mon blog. Actualités, cours et ressources Delphi, Lazarus et Pascal.
    Pensez à la balise - Quelqu'un vous a aidé ou vous appréciez une intervention ? Pensez au

  7. #7
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    mai 2015
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2015
    Messages : 89
    Points : 49
    Points
    49

    Par défaut

    Citation Envoyé par gvasseur58 Voir le message
    Bonsoir,

    Le soulignement est normal puisque vous mélangez plusieurs instructions dans un concentré qui n'a plus de sens
    Le principe du travail est celui-ci :
    * tant que la liste contient des éléments
    * je lis un élément ;
    * je vérifie s'il contient un 'i' ;
    * si tel est le cas, je supprime l'élément ;
    * je passe à l'élément suivant.

    L'intérieur de la boucle pourrait ressembler à ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    // J est le compteur de la boucle de lbxList.Items.Count - 1 à 0
    // J'ai choisi J pour bien marquer la différence avec le caractère cherché qui est 'i'.
    if Pos('i', lbxList.Items.Strings[J]) > 0 then // code de Roland : y a-t-il un 'i' dans la chaîne en cours ? - vaut True si la comparaison est vérifiée
      lbxList.Items.Delete(J); // si oui je le supprime
    Attention à la boucle : il faut commencer par la fin de la liste et décrémenté le compteur (de lbxList.Items.Count - 1 à 0) : sinon, à chaque suppression, la liste est diminuée d'un élément à partir du début et le compteur devient faux !

    Bon courage,

    Gilles
    Merci pour cette excellente réponse sur ce forum comme tout ceux ici présent, j'ai une dernière erreur, pouvez-vous me la résoudre s'il vous plaît ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    procedure TFPrincipal.btnDisparitionClick(Sender: TObject);
    var J: integer;
    begin
      if Pos('i', String) > 0 then begin //Erreur a ce niveau
         For J := lbxList.Items.Count - 1 downto 0 do
             if Pos('i', lbxList.Items.Strings[J]) > 0 then
                lbxList.Items.Delete(J);
          end else begin
           ShowMessage('Pas de mot en i!');
     
       end;
    end;

  8. #8
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    décembre 2011
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : décembre 2011
    Messages : 2 974
    Points : 10 674
    Points
    10 674
    Billets dans le blog
    4

    Par défaut

    Il y a juste des choses à enlever dans votre code pour qu'il fonctionne. La première ligne n'a aucun sens : string est un type !

    Voici la bonne partie de votre code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    procedure TFPrincipal.btnDisparitionClick(Sender: TObject);
    var J: integer;
    begin
      for J := lbxList.Items.Count - 1 downto 0 do
        if Pos('i', lbxList.Items.Strings[J]) > 0 then
          lbxList.Items.Delete(J);
    end;
    Il vous reste à gérer le cas où aucune chaîne contenant un "i" n'est trouvée. Pourquoi pas en ajoutant un compteur ?

  9. #9
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    mai 2015
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2015
    Messages : 89
    Points : 49
    Points
    49

    Par défaut

    Citation Envoyé par Roland Chastain Voir le message
    Il y a juste des choses à enlever dans votre code pour qu'il fonctionne. La première ligne n'a aucun sens : string est un type !

    Voici la bonne partie de votre code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    procedure TFPrincipal.btnDisparitionClick(Sender: TObject);
    var J: integer;
    begin
      for J := lbxList.Items.Count - 1 downto 0 do
        if Pos('i', lbxList.Items.Strings[J]) > 0 then
          lbxList.Items.Delete(J);
    end;
    Il vous reste à gérer le cas où aucune chaîne contenant un "i" n'est trouvée. Pourquoi pas en ajoutant un compteur ?
    Merci de votre aide, j'ai résolu mon problème merci a vous tous

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

Discussions similaires

  1. Sed supprimer les mots de deux lettres et moins
    Par bougnbie dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 18/03/2013, 23h28
  2. Réponses: 6
    Dernier message: 12/02/2011, 14h11
  3. [XL-2007] Macro, pour supprimer les lignes contenant « #REF! »
    Par LittleDaddy dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 30/01/2011, 00h05
  4. Supprimer les fichiers contenant les mots "xxxxxx"
    Par toxyco dans le forum VBScript
    Réponses: 3
    Dernier message: 10/06/2010, 09h53
  5. Macro pour supprimer les lettres d'une cellule?
    Par LittleSun dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 26/01/2010, 19h56

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