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 :

Vérifier le premier mot dans une ligne d'un RichEdit et supprimer cette ligne s'il s'y trouve


Sujet :

Langage Delphi

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2006
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : Services à domicile

    Informations forums :
    Inscription : Octobre 2006
    Messages : 74
    Points : 50
    Points
    50
    Par défaut Vérifier le premier mot dans une ligne d'un RichEdit et supprimer cette ligne s'il s'y trouve
    Bonjour

    J'ai un RichEdit qui contient plusieurs lignes de texte dont certaines commencent par un jour de la semaine (lundi, mardi, etc ...)
    Je cherche une procédure pour supprimer une ligne uniquement si un jour de la semaine est le 1er mot de cette ligne

    J'ai dans mon code ci dessous une procédure qui fonctionne uniquement si le jour est dimanche (en prenant exemple avec la lettre d) mais j'aimerai l'adapter avec le nom des jours de la semaine complet (de lundi à dimanche) et je ne trouves pas .....


    A vous lire
    Cordialement
    Beauserge

    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
    procedure TForm1.Button1Click(Sender: TObject);
    var X: Integer;
    ligne:Integer;
    begin   
    // ligne sur laquelle se trouve le curseur
    Ligne:= SendMessage(richedit1.Handle, EM_LINEFROMCHAR, Richedit1.SelStart, 0);
     
      for X:= Richedit1.Lines.Count-1 downto 0 do
          begin
             if LowerCase(Richedit1.lines[X][1])='d' then  // si jour de la semaine commence par lettre d au début de la ligne
                 begin
                   Richedit1.Lines.Delete(ligne);
                 end;
          end;
    end;

  2. #2
    Membre averti

    Homme Profil pro
    ingénieur, retraité
    Inscrit en
    Février 2007
    Messages
    230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : ingénieur, retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2007
    Messages : 230
    Points : 332
    Points
    332
    Par défaut
    Bonjour

    Extraire le premier mot de la ligne avec Pos pour trouver le premier espace ' ', puis Copy pour obtenir le mot
    et vérifier que c'est bien un jour de semaine.

    PL

  3. #3
    Membre expérimenté
    Avatar de retwas
    Homme Profil pro
    Développeur Java/Delphi
    Inscrit en
    Mars 2010
    Messages
    698
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Java/Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 698
    Points : 1 608
    Points
    1 608
    Billets dans le blog
    4
    Par défaut
    Tu peux utiliser les regex, le pipe "|" permet de matcher plusieurs mots :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /^(lundi|mardi|mercredi)

  4. #4
    Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2006
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : Services à domicile

    Informations forums :
    Inscription : Octobre 2006
    Messages : 74
    Points : 50
    Points
    50
    Par défaut
    Bonsoir

    Peux tu développer davantage Paulfr car ça m'aide pas beaucoup ....

    Quant au Regex Retwas, je sais pas ce que c'est .

    A+
    Beauserge

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 688
    Points : 13 117
    Points
    13 117
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    uses StrUtils;
     
    if AnsiStartsText('dimanche', Richedit1.lines[X]) then
      ...

  6. #6
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 037
    Points : 40 944
    Points
    40 944
    Billets dans le blog
    62
    Par défaut
    Bonjour,
    Citation Envoyé par Beauserge Voir le message
    Quant au Regex Retwas, je sais pas ce que c'est .
    les expressions régulières, elles pourraient "presque" faire le tout en une passe (contrôle et suppression) grâce au Regex.Replace
    [Edit]
    test rapide, mais qui met à blanc les lignes contenant un jour en début de ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    uses ... System.RegularEpressions
    ...
    var ARegEx: TRegEx; // je crée l'expression avant mais la syntaxe TRegEx.Replace(chaine,expression,remplacement,options) est possible
    begin
     ARegEx:=TregEx.Create('^(lundi|mardi|mercredi|jeudi|vendredi|samedi|dimanche).*$',[roIgnoreCase,roMultiline,ronotEmpty]);
     RichEdit1.Text:=ARegEx.Replace(RichEdit1.Text,''); // 
    end;
    Seul hic, avec Replace je ne sais pas pas supprimer une ligne vide

    donc voilà comment je m'en sort
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    procedure TForm8.Button2Click(Sender: TObject);
    var x  : integer;
    begin
     for x:=0 to pred(richedit1.Lines.count) do
       if TRegEx.isMatch(Richedit1.Lines[x],'^(lundi|mardi|mercredi|jeudi|vendredi|samedi|dimanche).*$') then
           RichEdit1.Lines.Delete(x);
    end;
    [\Edit]

    pour la réponse de Paul, à mon avis le copy n'est même pas nécessaire

    il faut changer la ligne 10 du code fourni en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
             if   pos(LowerCase(Richedit1.lines[X],'dimanche')=1
             OR pos(LowerCase(Richedit1.lines[X],'lundi')=1
             .....     
             then  // si jour de la semaine commence la phrase
    et le AnsiStartsText d'AndNotOr est beaucoup plus élégant que le pos

    ceci écrit que se passerai t-il si le jour est en caractère gras ou autre mise en forme ? je n'utilise que rarement Richedit et ne sait donc pas exactement ce qui est contenu dans une 'lines' de ce dernier quand il y a des mises en forme
    [edit]
    j'ai profité de mon test avec les expressions régulières pour vérifier, à priori la mise en forme (j'ai testé uniquement le gras) n'est pas prise en compte dans cette restitution
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  7. #7
    Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2006
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : Services à domicile

    Informations forums :
    Inscription : Octobre 2006
    Messages : 74
    Points : 50
    Points
    50
    Par défaut
    Bonjour Andnotor et SergioMaster

    J'ai essayé les expressions régulières SergioMaster mais dans le uses ... "System.RegularEpressions" ne passe pas (le compilateur me renvoie l'erreur fichier .dcu System.RegularEpressions introuvable !)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    uses ... System.RegularEpressions
    J'ai donc testé avec la méthode de Andnotor qui fonctionne
    Voici un bout de mon code - Par contre y'a t'il moyen de simplifier mon code pour éviter la répétition des RichEdit1.lines.delete (x) après chaque if et de réaliser (l'opération après suppression d'une ligne) si une des conditions est remplie ?


    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
    var
    quantite: integer;
        ...
           if AnsiStartsText('dimanche', Richedit1.lines[x])then
               RichEdit1.Lines.Delete(x);
     
             if AnsiStartsText('lundi', Richedit1.lines[x])then
               RichEdit1.Lines.Delete(x);
     
             if AnsiStartsText('mardi', Richedit1.lines[x])then
               RichEdit1.Lines.Delete(x);
     
             if AnsiStartsText('mercredi', Richedit1.lines[x])then
               RichEdit1.Lines.Delete(x);
     
              Quantite:=StrToInt(Editquantite.text);  // opération après suppression d'une ligne
              Editquantite.text:=IntToStr(Quantite-1);   // suite opération
    ....
    A vous lire
    Cordialement

    Beauserge

  8. #8
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 037
    Points : 40 944
    Points
    40 944
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par Beauserge Voir le message
    J'ai essayé les expressions régulières SergioMaster mais dans le uses ... "System.RegularEpressions" ne passe pas
    c'est le problème de ne pas indiquer la version de Delphi utilisé à chaque nouvelle question. Cela fonctionne parfaitement avec des versions qui ont cette unité
    Voici un bout de mon code - Par contre y'a t'il moyen de simplifier mon code pour éviter la répétition des RichEdit1.lines.delete (x) après chaque if et de réaliser (l'opération après suppression d'une ligne) si une des conditions est remplie ?
    AnsiStartstext renvoi un booleen donc il suffit de faire des OR

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
           if   AnsiStartsText('dimanche', Richedit1.lines[x])
           OR  AnsiStartsText('lundi', Richedit1.lines[x])
           OR AnsiStartsText('mardi', Richedit1.lines[x])
           OR AnsiStartsText('mercredi', Richedit1.lines[x])
           OR ....
           then begin 
              RichEdit1.Lines.Delete(x);
              ...
           else begin
             ....
           end;
    A vous lire
    Cordialement

    Beauserge[/QUOTE]
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  9. #9
    Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2006
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : Services à domicile

    Informations forums :
    Inscription : Octobre 2006
    Messages : 74
    Points : 50
    Points
    50
    Par défaut
    c'est vrai excuse moi SergioMaster d'avoir oublié de préciser que je travaille avec Delphi 7 Edition personnel

    bien noté pour le OR (mais je n'arrive pas à compiler mon code) - 2 erreurs au niveau des end que je ne comprends pas ! (voir image écran)

    Nom : erreur compil if ainsistarts.jpg
Affichages : 448
Taille : 262,1 Ko


    Beauserge

  10. #10
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 669
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 669
    Points : 5 238
    Points
    5 238
    Par défaut
    l'instruction "or if" n'existe pas.
    SergioMaster t'a pourtant donné la syntaxe !

  11. #11
    Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2006
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : Services à domicile

    Informations forums :
    Inscription : Octobre 2006
    Messages : 74
    Points : 50
    Points
    50
    Par défaut
    Autant pour moi Popo et merci !!! J'ai oublié de mettre mes lunettes :-)
    C'est impec à présent

    Merci beaucoup à fortiori à SergioMaster ainsi que Andnotor pour votre aide

    A+
    Beauserge

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

Discussions similaires

  1. [XL-2007] Depuis excel trouver un mot dans un document Word et supprimer la ligne ou est le mot
    Par scoubi77 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 03/10/2015, 18h55
  2. Récupérer 1er mot dans une chaîne
    Par HaLc[Y]oNiA dans le forum Langage SQL
    Réponses: 1
    Dernier message: 15/07/2008, 13h23
  3. récuperer un mot dans une ligne sous C#
    Par ouadie99 dans le forum C#
    Réponses: 2
    Dernier message: 07/01/2008, 17h25
  4. remplacer un mot dans une ligne
    Par italiasky dans le forum Shell et commandes GNU
    Réponses: 12
    Dernier message: 08/04/2007, 19h19
  5. Chercher des mots dans une ligne
    Par chemouz dans le forum C++
    Réponses: 1
    Dernier message: 17/12/2005, 12h42

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