none
Comment Suprimer une ligne contenant certain caractère dans un fichier * txt ou une RicheTextBox. RRS feed

  • Discussion générale

  • Bonjour,

    Code c#

    Je cherche comment suprimer une ligne contenu dans une fichier txt ou une richetextbox. Je m'explique :

    j'ai un fichier contenant 4 000 lignes a contrôler.

    si j'ai une ligne contenant :  1111  5555  AAAAA ou BBBB ou CCCC   plusieur fois le même caractère a la suite ou dispatché  : 2525252   0101010  060606606  ou  E456E17E63E4E7925 , je vaux pouvoir supprimer la ligne du fichier txt.

    En fait, je n edois pas avoir plus de 4 fois le meme caratère dans le même lligne.

    Je sais pas comment faire.

    Merci de votre aide.

    samedi 29 septembre 2018 21:40

Toutes les réponses

  • Bonjour,

    Je proposerais bien ça :

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Text.RegularExpressions;  // <- ligne à ne pas oublier d'ajouter
    using System.Threading.Tasks;

    namespace Filt4
    {
        public class Reg
        {
            private readonly Regex R = new Regex(
                            "aaaa|bbbb|cccc|dddd|eeee|ffff|gggg|hhhh|iiii|jjjj|kkkk|llll|mmmm|" +
                            "nnnn|oooo|pppp|qqqq|rrrr|ssss|tttt|uuuu|vvvv|wwww|xxxx|yyyy|zzzz|" +
                            "1111|2222|3333|4444|5555|6666|7777|8888|9999|0000",
                            RegexOptions.IgnoreCase);

            public bool Stoppe(string entree)
            {
                return (R.Match(entree).Success);
            }
        }
    }

    Attention au commentaire en haut.

    Pour appeler ça, voici la méthode main, si on veut analyser un fichier Entree.txt dans le répertoire du programme, et envoyer le résultat dans Sortie.txt dans le même répertoire (et en copie à l'écran) :

            static void Main(string[] args)
            {
                Reg R = new Reg();
                string[] lines = System.IO.File.ReadAllLines(
                    Path.Combine(Directory.GetCurrentDirectory(), "Entree.txt"));
                using (StreamWriter outputFile =
                    new StreamWriter(
                            Path.Combine(
                            Directory.GetCurrentDirectory(),
                            "Sortie.txt"
                            )
                        )
                   )
                {
                    foreach (string line in lines)
                    {
                        if (!R.Stoppe(line))
                        {
                            Console.WriteLine(line);
                            outputFile.WriteLine(line);
                        }
                    }
                }
                Console.ReadKey();
            }

    Cette fois la référence qu'il ne faudra pas oublier d'ajouter c'est System.IO

    Il peut y avoir besoin d'ajouter, en deuxième argument des ouvertures de fichiers, un encoding, si on a des problèmes avec les caractères accentués.

    vendredi 12 octobre 2018 04:47
  • ou dispatché  : 2525252   0101010  060606606  ou  E456E17E63E4E7925

    Ah mais je n'ai pas traité cet aspect, ça m'apprendra à foncer tête baissée.

    On va être obligé, pour chaque ligne, de compter les occurrences de chaque caractère, et si il y en a un qui dépasse ou atteint quatre on élimine la ligne.

                char[] sep = { 'a', 'A' };
                Console.WriteLine("avec des a".Split(sep).Length - 1);

    // ne pas oublier de traiter le cas où la lettre cherchée est absente

    Ça pourrait être intéressant de voir ce qu'on en dirait dans un forum plus fréquenté, je ne suis pas certain qu'il existe plus élégant.




    • Modifié Gloops vendredi 12 octobre 2018 05:26
    vendredi 12 octobre 2018 04:54
  • Bonjour,

    Vous pourriez peut-être vous en sortir via une requête Linq.

    var multipleChar = maLigne.ToCharArray()
                              .GroupBy(letter => letter)
                              .Where(group => group.Count() >= 4)
                              .Any();
    Si mutlipleChar est true, vous pouvez exclure la ligne.


    mardi 16 octobre 2018 05:32
  • Bien vu !

    mardi 16 octobre 2018 08:56