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

C# Discussion :

Comment extraire d'un fichier .txt certains lignes specifies


Sujet :

C#

  1. #1
    Membre extrêmement actif
    Avatar de mihaispr
    Inscrit en
    Décembre 2008
    Messages
    1 025
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 025
    Points : 858
    Points
    858
    Par défaut Comment extraire d'un fichier .txt certains lignes specifies
    Salut a tous! J'ai fais un menustrip en C# gui a des options (new, open, save). Je veux extraire de mon fichier .txt (qui a des 7 lignes) seulement les lignes comprise entre 3 et 6.

    A l'option open il charge mon fichier .txt dans une composante richtextbox qui se trouve aussi sur mon gui. Mais je veux qu'il charge dans mon richtextbox seulement les lignes 3-6 pas tout le document de mon fichier .txt.


    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
     
    private void openToolStripMenuItem_Click(object sender, EventArgs e)
            {
                OpenFileDialog deschide = new OpenFileDialog(); // creation object pour la classe OpenFileDialog
                deschide.DefaultExt = "*.txt"; // extension
                deschide.AddExtension = true;  // ajout automatiquement de l'extension
     
                deschide.Filter = "*.txt|";  // filtrer les types des fichier (txt, xml et ainsi du suite)
     
     
                if (deschide.ShowDialog() == DialogResult.OK)
                  {
                     try
                       {
                    FileStream file = new FileStream(deschide.FileName, FileMode.Open, FileAccess.ReadWrite, FileShare.None); // preparation pour lis/ecrit d'un fichier 
     
                    byte[] info = new byte[file.Length]; // tableau de type byte pour avoir la dimension du fichier
                    file.Read(info,0,info.Length); // lis completement tous le contenu du fichier et il depose ca dans le tableau info
     
                    richTextBox1.Text = System.Text.Encoding.ASCII.GetString(info);  // conversion en string les octets du tableau info            
     
                }
                catch (Exception eror)
                {
                    MessageBox.Show(eror.Message);
     
                }
       finally
        { file.Close(); // fermeture de fichier
        }
      }
    }

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Février 2005
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 94
    Points : 98
    Points
    98
    Par défaut
    Regarde la methode ReadLine d'un StreamReader par là: http://msdn.microsoft.com/fr-fr/libr....readline.aspx

  3. #3
    Membre habitué Avatar de Johann7751
    Profil pro
    Analyste Programmeur Junior
    Inscrit en
    Février 2009
    Messages
    234
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Analyste Programmeur Junior

    Informations forums :
    Inscription : Février 2009
    Messages : 234
    Points : 142
    Points
    142
    Par défaut
    Salut,

    Pour récupérer les lignes 3 à 6 de ton fichier, tu peux essayer de le lire ligne par ligne et tu stockes chaque ligne dans un objet de type ArrayList.
    Après tu peux créer un tableau de chaînes de caractères pour récupérer les lignes 3 à 6 de ton fichier à partir de ton ArrayList qui contient toutes les lignes du fichier.


    Code : Méthode qui lit un fichier (chemin absolu du fichier passé en paramètre) et qui stocke chaque ligne du fichier dans un ArrayList

    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
     
    using System.Collections;
     
           public static string[] LecteuDeFichier(string fileName)
            {
     
                // Création d'une ArrayList pour stocker chaque ligne du fichier
                ArrayList al = new ArrayList();
     
     
                // Création du flux de lecture
                StreamReader sr = null;
     
                // Création d'une variable pour stocker le contenu d'une ligne
                string line;
     
                try
                {
                    sr = new StreamReader(fileName);
                    line = sr.ReadLine();
     
                    while (line != null)
                    {
                        al.Add(line.Trim());
                        line = sr.ReadLine();
                    }
     
                    // Création d'un tableau de chaînes de caractères pour stocker les lignes 3 à 6 de ton fichier
                    string[] result = new string[4];
     
                    tab[0] = al[2].ToString(); // ligne 3
                    tab[1] = al[3].ToString(); // ligne 4
                    tab[2] = al[4].ToString(); // ligne 5
                    tab[3] = al[5].ToString(); // ligne 6
                }
     
                finally
                {
                    // Fermeture streamreader
                    if (sr != null)
                    {
                        sr.Close();
                        sr.Dispose();
                    }
                }
     
                return result;
            }

  4. #4
    Rédacteur
    Avatar de Louis-Guillaume Morand
    Homme Profil pro
    Cloud Architect
    Inscrit en
    Mars 2003
    Messages
    10 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Cloud Architect
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 10 839
    Points : 28 254
    Points
    28 254
    Par défaut
    @Johann7751 dans ta solution, si je te donne un fichier de 100 000 lignes, il te faudra 1 minute 20 pour me sortir les lignes 3 à 6.

    il faut absolument arrêter le traitement lorsque la ligne 6 est atteinte plutôt que tout lire, pour des questions logiques de performance. un simple compteur manuel peut faire l'affaire. mais sinon ce que tu dis avec Kentin est effectivement le début de la meilleure solution

  5. #5
    Membre habitué Avatar de Johann7751
    Profil pro
    Analyste Programmeur Junior
    Inscrit en
    Février 2009
    Messages
    234
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Analyste Programmeur Junior

    Informations forums :
    Inscription : Février 2009
    Messages : 234
    Points : 142
    Points
    142
    Par défaut
    C'est vrai, il suffit de rajouter un compteur et c'est bon.
    Je considérais que le fichier ne faisait que 7 lignes, donc je ne m'étais pas posé la question.

  6. #6
    Rédacteur
    Avatar de Louis-Guillaume Morand
    Homme Profil pro
    Cloud Architect
    Inscrit en
    Mars 2003
    Messages
    10 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Cloud Architect
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 10 839
    Points : 28 254
    Points
    28 254
    Par défaut
    Citation Envoyé par Johann7751 Voir le message
    C'est vrai, il suffit de rajouter un compteur et c'est bon.
    Je considérais que le fichier ne faisait que 7 lignes, donc je ne m'étais pas posé la question.
    j'avais pas vu ce détail, tu as raison dans ce cas, plus rapide sans compteur.
    mae culpa

Discussions similaires

  1. Réponses: 5
    Dernier message: 08/02/2013, 11h05
  2. comment ecrire dans un fichier txt avec WriteFile?
    Par Art19 dans le forum Langage
    Réponses: 13
    Dernier message: 04/07/2007, 15h50
  3. Réponses: 6
    Dernier message: 28/02/2007, 16h18
  4. Réponses: 3
    Dernier message: 12/04/2006, 12h55
  5. Pb import fichier txt avec lignes de longueurs diverses
    Par zebulon90 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 09/12/2004, 08h32

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