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 :

Problemes lors de la lecture d'un fichier [Débutant]


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2013
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 26
    Points : 19
    Points
    19
    Par défaut Problemes lors de la lecture d'un fichier
    Voila mon code
    Pour l'instant je veux lire un fichier et afficher chaque ligne
    Puis récupérer les infos séparées par un : ou un ;
    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
    StreamReader lectureFic = new StreamReader("C:\\Users\\...\\list_users.txt");
     
                // Nombre de lignes
                string Lignes = "";
                int i = 0;
     
                while(Lignes!=null)
                {
                    Lignes = lectureFic.ReadLine();
                    i++;
                    // Affiche les lignes
                    Console.WriteLine(Lignes);
     
                    if(Lignes!=null)
                    {
                        //Type local ou remote
                    char sep = ':';
                    string[] types = Lignes.Split(sep);
                        foreach(string type in types)
                        {
                            Console.WriteLine(type);
                        }
                    }
     
     
                }
    Sauf que
    1/ mon fichier contient x lignes et le résultat est toujours x+1 lignes
    2/ J'ai un message d'erreur : Exception non gérée*: System.NullReferenceException: La référence d'objet n'est pas définie à une instance d'un objet sur la ligne string[] types = Lignes.Split(sep);Si j'ai bien compris ce message apaprait si un des objets est null mais là je vois pas ce qui est null

  2. #2
    Membre chevronné
    Avatar de PixelJuice
    Homme Profil pro
    Ingénieur .NET & Game Designer
    Inscrit en
    Janvier 2014
    Messages
    641
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur .NET & Game Designer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2014
    Messages : 641
    Points : 2 160
    Points
    2 160
    Par défaut
    Bonjour,

    qu'entends tu par lignes + 1 ? Tu parles du vide qui est affiché ? Ca vient du fait que tu écris la ligne sans vérifier si elle est nulle, il suffit de descendre le WriteLine() dans le bloc if


    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
                    if (Lignes != null)
                    {
                        // Affiche les lignes
                        Console.WriteLine(Lignes);
     
                        //Type local ou remote
                        char sep = ':';
     
                        string[] types = Lignes.Split(sep);
     
                        foreach (string type in types)
                        {
                            Console.WriteLine(type);
                        }
                    }
    Pour de ce qui est de l'exception, pourrais-tu montrer le contenu de ton fichier (ou une partie si il est volumineux), peut être qu'il y a quelque chose qui n'est pas prévu. J'ai testé ton code vite fait avec une liste très simple avec des : et il n'y a pas de problème.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2013
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 26
    Points : 19
    Points
    19
    Par défaut
    Mon fichier comporte 3 lignes et il me dit qu'il y en a 4, donc a priori une 'null'.
    Serait ce la cause du message d'erreur ?

    Si je mets le WriteLine(Lignes) dans le if, j'ai le même résultat
    Si je sors le Writeline(type) du foreach j'ai une autre erreur puisque type n'est valable que dans la boucle
    Ou alors j'ai mal compris tes indications

    Merci en tout cas

  4. #4
    Max
    Max est déconnecté
    Expert éminent sénior

    Avatar de Max
    Homme Profil pro
    Artisan développeur
    Inscrit en
    Mai 2007
    Messages
    2 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Artisan développeur
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 2 954
    Points : 14 933
    Points
    14 933
    Par défaut
    Salut

    Pour le mauvais nombre de lignes, cela vient de l'ordre de tes instructions et de ta condition de sortie. Elles ne s'enchaînent pas bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    while (Lignes!=null) {
    	Lignes = lectureFic.ReadLine();
    	i++;
    	// ...
    }
    Si tu déroules ta boucle :

    • Lignes est initialisé à "", tu rentres donc ta boucle
    • 1er passage : une ligne est lue, c'est OK, i passe à 1
    • 2e passage : une ligne est lue, c'est OK, i passe à 2
    • 3e passage : une ligne est lue, c'est OK, i passe à 3
    • 4e passage : une ligne est lue, c'est KO c'est la fin du fichier donc Lignes passe à null, mais i passe quand même à 4
    • tu sors de la boucle vu que Lignes vaut null

    C'est bien à cause de ça que tu obtiens un System.NullReferenceException : tu essaies de faire un Split sur Lignes qui vaut null.

    Voici une meilleure façon simple de lire un fichier et compter ses lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    using (StreamReader reader = new StreamReader("...")) {
    	string currentLine;
    	int i = 0;
    	while ((currentLine = reader.ReadLine()) != null) {
    		// Ici tu ne rentres dans ce bloc que lorsque la ligne est valable
    		i++;
    	}
    }

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2013
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 26
    Points : 19
    Points
    19
    Par défaut
    Super merci beaucoup

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

Discussions similaires

  1. 2 petits points css à régler pour mon site
    Par ndsaerith dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 11/11/2010, 12h25
  2. un petit probleme pour vous un grand pour moi
    Par forstyle dans le forum Réseau
    Réponses: 6
    Dernier message: 04/11/2009, 20h03
  3. Petit probleme de MCD pour un bordereau
    Par campesinos dans le forum Schéma
    Réponses: 22
    Dernier message: 16/01/2007, 20h39
  4. [TPW] Petit problème pour réaliser un pendule double
    Par lapin59 dans le forum Turbo Pascal
    Réponses: 39
    Dernier message: 02/05/2006, 11h18
  5. [Débutant] question facile pour vous
    Par Michel_57 dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 05/04/2006, 07h16

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