Fichier .txt volumineux [Résolu]

Signaler
-
Messages postés
6
Date d'inscription
jeudi 6 février 2020
Statut
Membre
Dernière intervention
7 février 2020
-
Bonjour,
j'ai un petit soucis mon programme dois récupérer un fichier log et l'écrire dans un richtext box ou autre (je débute en c# donc je connais pas tout) j'aimerai d'abord afficher entièrement le fichier et après trier et afficher que les lignes avec l'heure sélectionné si vous pouviez m'aidez je prend toute aide possible merci d'avance !

24 réponses

Messages postés
15924
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
7 mai 2021
540
Ha forcement si la date de début est après la date de fin, ça peut pas marcher.

Modifie ChargeFichier ainsi (j’ai tapé de tête sur mon iPad, j’espère ne pas avoir fait d’erreur de frappe).

        private void ChargerFichier()
        {
            string[] lignes = File.ReadAllLines("test.txt");//chaque ligne est chargée dans un emplacement de tableau

            foreach(string l in lignes)//on itère le tableau pour créer la liste de logs
            {
                Log leLog = Log.Parse(l);
                if (leLog != null)
                    lesLogs.Add(leLog);
                else
                    File.AppendAllText("LignesEnErreur.txt", l);//écrit les lignes rejetées dans le fichier LignesEnErreur.txt
            }
            lesLogs = lesLogs.OrderBy(x => x.Datation).ToList();
        }
Toujours pareil rien ne s'affiche cependant il boucle bien pour chaque ligne
hum.

Je te propose de mettre ton fichier sur un serveur de partage (cjoint, dropbox, google drive etc...) et soit de poster le lien ici soit de me l'envoyer en MP.
Pour le MP, il faut que tu t'inscrives et que je débloque mon compte, donc précise le sur le fil
Messages postés
6
Date d'inscription
jeudi 6 février 2020
Statut
Membre
Dernière intervention
7 février 2020

Je préfère te l'envoyer par mp si ça ne te gène pas
Messages postés
15924
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
7 mai 2021
540
Mon compte est débloqué.
Tu peux envoyer un MP
Messages postés
15924
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
7 mai 2021
540
Bon chez moi ça marche, ça pédale quelques secondes, j'ai 300Mo de RAM chargés.

J'en ai profité pour amélioré un peu l'affichage.

D'abord une classe supplémentaire
    class LogGroupe
    {
        public LogGroupe(IGrouping<string,Log> Groupe)
        {
            Key = Groupe.Key;
            Logs = Groupe.ToList();
        }
        public string Key { get; set; }

        public List<Log> Logs { get; set; }

        public int Occurence { get { return Logs.Count; } }

        public string Text { get { return string.Format("{0,-15}\t{1,7}\toccurence(s)", Key, Occurence); } }
    }


Puis les 2 méthodes suivantes sont modifiées
        private void DateTimePicher_ValueChanged(object sender, EventArgs e)
        {
            //les évènements ValueChanged de dtpDebut et dtpFin sont tous deux abonnées à cette méthode
            IEnumerable<Log> logsFiltres = lesLogs.Where(l => l.Datation >= dtpDebut.Value && l.Datation <= dtpFin.Value);//requête qui filtre les logs par date

            List<LogGroupe> logsGroupes = logsFiltres.GroupBy(l => l.Erreur).Select(g => new LogGroupe(g)).ToList();//regroupement des logs filtrés par erreur

            lbxErreurs.DataSource = null;
            lbxErreurs.DataSource = logsGroupes;
            lbxErreurs.DisplayMember = "Text";//les logs groupés sont affichés dans la listBox
        }

        private void lbxErreurs_SelectedIndexChanged(object sender, EventArgs e)
        {
            //L'évènement SelectIndexChanged de la listBox est abonné à cette méthode.
            if (lbxErreurs.SelectedIndex == -1)
                return;// rien n'est sélectionné => on sort

            ListBox lbx = sender as ListBox;
            LogGroupe logGroupe = lbx?.SelectedItem as LogGroupe;

            if (logGroupe == null)
                return; //Y'a un problème => on sort

            dgwLog.DataSource = null;
            dgwLog.DataSource = logGroupe.Logs;//on affiche les log dans le créneau horaire, avec l'erreur sélectionnée
        }



Projet complet https://www.dropbox.com/s/hsxm87vw4467mk9/Test%20Winform.zip?dl=0
Messages postés
6
Date d'inscription
jeudi 6 février 2020
Statut
Membre
Dernière intervention
7 février 2020

c'est génial merci beaucoup ça me fait une bonne base pour avancer ! Merci vraiment !