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 :

problème avec StreamReader sur la lecture d'un fichier texte


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    retraité
    Inscrit en
    Juillet 2018
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Juillet 2018
    Messages : 23
    Par défaut problème avec StreamReader sur la lecture d'un fichier texte
    Bonjour je suis en train de refaire un programme dans lequel j'ai énormément de GOTO. Pour essayé de les éliminer, j'ai fais des petite fonctions.
    Dans mon code pour un bouton j'ai
    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
     private void button1_Click(object sender, EventArgs e)
     {
         //définition des variables locale
         DialogResult r = DialogResult;
         // variable longueur pour la longueur du nom du fichier avec le chemin
         int longueur = 0;
         if (radioButton1.Checked == false && radioButton2.Checked == false && radioButton3.Checked == false && radioButton4.Checked == false)
         {
             MessageBox.Show("Vous n'avez pas choisi le type de processeur!", "ERREUR", MessageBoxButtons.OK, MessageBoxIcon.Warning);
             return;
         }
         //ouverture du fichier à désassembler
         OpenFileDialog dlg = new OpenFileDialog();
         //affichage de la boite de dialogue ouverture de fichier
         dlg.Title = "Ouverture du fichier à désassembler";
     .......
     //création du constructeur de lecture du fichier à désassembler
     FileStream fs = new FileStream(fichier, FileMode.Open, FileAccess.Read);
     //création du lecteur
     StreamReader lecfic = new StreamReader(fs);
    Dans une fonction j'ai fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     public void adok()
     {
         //lecture de la première ligne de code (entete)
         A = lecfic.ReadLine();
         //lecture de la deuxième ligne début du code
         A = lecfic.ReadLine();
         //positionnement sur le premier byte de la ligne commence à 0, 5 hexa soit 6 en décimale
         pb = 5;
         // vers la routine Boucle1
         Boucle1(); // goto Boucle1; //=====>
     }
    Lorsque j’exécute j'ai un message sur la première ligne A = lecfic.ReadLine(); Exception levée A = lecfic.ReadLine(); system.Nullreference exception : la référence d'objet n'est pas définie à une instance d'un objet.
    J'ai du oublier quelques chose ?? Je pense que les définitions du StreamReader sont perdue en quitant la fonction bouton1. Comment les faire suivre dans mes autres fonctions ????

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 545
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 545
    Par défaut
    bah, c'est quoi A ?
    sinon pour ta variable lecfic effectivement c'est un problème de portée, ici elle est déclarée dans ta fonction de click, donc n'existe plus à sa sortie.
    donc il faut la déclarer à l'extérieur de la fonction en public si nécessaire, ou peut-être mieux la passer en paramètre à cette fonction qui en a besoin.
    Ou encore, passer le nom du fichier a ta fonction et initié ton streamreader dans celle-ci (un commentaire indique que tu lis la 1ère ligne du fichier, or a priori, rien n'assure que l'on se trouverait au début du fichier à ce moment là)

  3. #3
    Membre Expert
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 941
    Par défaut
    Comme dans adok() il accède directement à lecfic sans le déclarer, il est possible qu'il y ait une variable de ce nom déclarée sur la portée de la fenêtre. Mais comme dans le gestionnaire du bouton il redéclare une variable lecfic, celle-ci masque la variable globale qui, du coup, n'est pas initialisée.

  4. #4
    Membre averti
    Homme Profil pro
    retraité
    Inscrit en
    Juillet 2018
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Juillet 2018
    Messages : 23
    Par défaut
    Bonjour, n'arrivant pas à faire, je reviens vers vous.
    J'ai fais
    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
     public void adok()
     {
         //lecture de la première ligne de code (entete)
         Lecture();
         //lecture de la deuxième ligne début du code
         Lecture();
         //positionnement sur le premier byte de la ligne commence à 0, 5 hexa soit 6 en décimale
         pb = 5;
         // vers la routine Boucle1
         Boucle1(); // goto Boucle1; //=====>
     }
     /// <summary>
     /// Routine lecture dans le fichier xxx.epr ou xxx.obj ou xxx.s19
     /// </summary>
     /// <returns></returns>
     
     public void Lecture()
     {
         //création de fs file stream pour la lecture
         FileStream fs = new FileStream(fichier, FileMode.Open, FileAccess.Read);
         //création du lecteur
         StreamReader lecfic = new StreamReader(fs);
         //lecture d'une ligne de code
         A = lecfic.ReadLine();
         //return A;
     }
    sans résultat je lis toujours la première lire du fichier en entré.
    A est une variable string qui me permet de récupérer une ligne dans le fichier en entrée. Fichier texte
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
         00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
    0000 0F 7F 70 01 7F 70 03 7F 70 11 7F 70 13 7F 70 06
    0010 CE 00 04 FF 70 00 CE FF 1C FF 70 02 CE 00 05 FF
    Merci de m'aider

  5. #5
    Membre Expert
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 941
    Par défaut
    À chaque fois que tu appelles la fonction Lecture() tu ouvres le fichier et lis la première ligne. Il te faut ouvrir le fichier une fois et garder la même source après avoir ignoré la première ligne. Par ailleurs, tu peux récupérer le contenu du fichier sous forme de lignes avec un simple File.ReadLines ou File.ReadAllLines.

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 545
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 545
    Par défaut
    A mon sens, il faut que tu comprennes ce que fait le programme et le refaire de zéro (ou presque) sans suivre la logique des goto, ça sera peut-être plus efficace, et à mon sens ici la fonction lecture n'a pas lieu d'être

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

Discussions similaires

  1. Question sur lecture d'un fichier text en Java
    Par ovcrash dans le forum Entrée/Sortie
    Réponses: 13
    Dernier message: 27/11/2007, 17h14
  2. Probleme sur la lecture d'un fichier
    Par Iskander81 dans le forum C
    Réponses: 10
    Dernier message: 10/05/2007, 14h51
  3. Lecture d'un fichier texte avec ligne vide.
    Par cotcouture dans le forum Général Python
    Réponses: 2
    Dernier message: 06/10/2006, 02h54
  4. Réponses: 6
    Dernier message: 23/02/2006, 12h09
  5. Réponses: 2
    Dernier message: 28/12/2005, 15h00

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