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

VB.NET Discussion :

Pb d'instanciation avec streamwriter


Sujet :

VB.NET

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 16
    Par défaut Pb d'instanciation avec streamwriter
    Bonjour à tous,


    J'ai une feuille avec un bouton qui execute le code ci-dessous :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Try
    Call Procedures.MAJfichierMaladies(My.Settings.pCheminDossierPrincipal & My.Settings.pFichierMaladies)
    Catch ex As Exception
    MsgBox(ex.Message & " - " & ex.Source)
    End Try
    J'ai un module nommé Procedures qui contient :
    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
    Public Sub MAJfichierMaladies(ByVal vChemin As String)
    Dim stwMaladies As StreamWriter, vLigne As String, y As Integer
    Try
    stwMaladies = New StreamWriter(vChemin, False, Encoding.Default)
    For y = 0 To mnuParametre.grdMaladies.RowCount - 1
    vLigne = mnuParametre.grdMaladies.Item(0, y).Value.ToString & ";" & mnuParametre.grdMaladies.Item(1, y).Value.ToString
    stwMaladies.WriteLine(vLigne)
    Next
    stwMaladies.Close()
    stwMaladies = Nothing
    Finally
    If Not IsNothing(stwMaladies) Then
    stwMaladies.Close()
    End If
    End Try
    End Sub
    et j'obtiens une exception avec le message :
    "La référence d'objet n'est pas définie à une instance d'un objet" et je ne comprends pas car mon streamwriter est défini et une nouvelle instance est bien lancé par "stwMaladies = New StreamWriter(vChemin, False, Encoding.Default)"

    Si certain d'entre vous ont des idées, elles sont les beinvenues car je galère là. D'avance merci pour votre aide ...

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    229
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 229
    Par défaut
    Salut,
    Mets,peut-être, quelques points d'arrêt pour dire a quelle ligne cela s'arrête.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 16
    Par défaut
    j'en ai mis à plusieurs endroits et tout se déroule bien.
    Le fichier est bien mis à jour correctement mais en sortie de l'appel de procédure, il me sort cette exception et du coup si je rajoute du code suite à cet appel, il ne l'execute pas.

  4. #4
    Membre Expert
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Par défaut
    Pas de problème avec ton code chez moi....

    Il ne faut plus de précision !
    Qui ne tente rien n'a rien !
    Ce qui ne nous tue pas nous rends plus fort !!
    Mon projet ZELDA en C++/Allegro
    http://www.tutoworld.com - Le Forum -
    Mes ressources Dotnet (cours, sources, tutos)
    --------------------------------------------
    + + =

    Ne pas oublier le Tag !

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    229
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 229
    Par défaut
    J'ai tester ton code et pas de problème non plus

  6. #6
    Membre Expert
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Par défaut
    Citation Envoyé par quentincabo Voir le message
    J'ai tester ton code et pas de problème non plus
    lol le problème viens donc de ton application, poste un zip de ton appli on va voir ca ^^
    Qui ne tente rien n'a rien !
    Ce qui ne nous tue pas nous rends plus fort !!
    Mon projet ZELDA en C++/Allegro
    http://www.tutoworld.com - Le Forum -
    Mes ressources Dotnet (cours, sources, tutos)
    --------------------------------------------
    + + =

    Ne pas oublier le Tag !

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 16
    Par défaut
    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
        Public Sub importFichierMaladies(ByVal nomFichier As String)
     
            Dim vPresenceMaladie As String, vAbsenceMaladie As String
     
            Try
                Dim strMaladies As StreamReader = New StreamReader(nomFichier, Encoding.Default)
                Dim vLigne As String = strMaladies.ReadLine()
                While Not vLigne Is Nothing
                    vPresenceMaladie = champsDelimite(vLigne, 1, "Interne")
                    vAbsenceMaladie = champsDelimite(vLigne, 2, "Interne")
                    mnuParametre.grdMaladies.Rows.Add(New String() {vPresenceMaladie.ToString, vAbsenceMaladie.ToString})
                    vLigne = strMaladies.ReadLine()
                End While
                strMaladies.Close()
     
            Catch ex As Exception
                MsgBox("Le fichier Maladies.txt n'est pas correct !", 4144, "Avertissement")
     
            End Try
     
        End Sub
    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
    49
    50
    51
        Private Function champsDelimite(ByVal vLigne As String, ByVal vPosition As Byte, ByVal vFournisseur As String) As String
     
            Dim i As Integer
            Dim vLongueurLigne As Integer = Len(vLigne)
            Dim vCompteur As Byte = 1
            Dim vValeur As String = vbNullString
     
            For i = 1 To vLongueurLigne
                If vFournisseur = "Externe" Then
                    If vCompteur = vPosition Then
                        If Mid(vLigne, i, 1) <> "," Then
                            If Mid(vLigne, i, 1) = "." Then
                                vValeur = vValeur & ","
                            Else
                                vValeur = vValeur & Mid(vLigne, i, 1)
                            End If
                        Else
                            Return vValeur
                        End If
                    Else
                        If Mid(vLigne, i, 1) <> "," Then
                            If Mid(vLigne, i, 1) = "." Then
                                vValeur = vValeur & ","
                            Else
                                vValeur = vValeur & Mid(vLigne, i, 1)
                            End If
                        Else
                            vValeur = vbNullString
                            vCompteur = vCompteur + 1
                        End If
                    End If
                Else
                    If vCompteur = vPosition Then
                        If Mid(vLigne, i, 1) <> ";" Then
                            vValeur = vValeur & Mid(vLigne, i, 1)
                        Else
                            Return vValeur
                        End If
                    Else
                        If Mid(vLigne, i, 1) <> ";" Then
                            vValeur = vValeur & Mid(vLigne, i, 1)
                        Else
                            vValeur = vbNullString
                            vCompteur = vCompteur + 1
                        End If
                    End If
                End If
            Next
            Return vValeur
     
        End Function
    en effet, c'est bien plus lisible ...

  8. #8
    Membre Expert
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Par défaut
    Et sur quelle ligne se situe l'erreur ?
    Qui ne tente rien n'a rien !
    Ce qui ne nous tue pas nous rends plus fort !!
    Mon projet ZELDA en C++/Allegro
    http://www.tutoworld.com - Le Forum -
    Mes ressources Dotnet (cours, sources, tutos)
    --------------------------------------------
    + + =

    Ne pas oublier le Tag !

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 16
    Par défaut
    en fait sur aucune ligne ...
    cette exception survient quand je sors de mon appel de procédure ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Try
        Call Procedures.MAJfichierMaladies(My.Settings.pCheminDossierPrincipal & My.Settings.pFichierMaladies)
    Catch ex As Exception
        MsgBox(ex.Message & " - " & ex.Source)
    End Try
    Sachant que tout ce qui se trouve dans ma procédure est bien effectué.
    Cela reste incompréhensible.

  10. #10
    Membre Expert
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Par défaut
    Chez moi ca marche donc je ne vois pas. Sinon enlève le try et mets des points d'arrets à chaque ligne, ca plante forcément sur une ligne !
    Qui ne tente rien n'a rien !
    Ce qui ne nous tue pas nous rends plus fort !!
    Mon projet ZELDA en C++/Allegro
    http://www.tutoworld.com - Le Forum -
    Mes ressources Dotnet (cours, sources, tutos)
    --------------------------------------------
    + + =

    Ne pas oublier le Tag !

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 16
    Par défaut
    En effet, en faisant comme tu m'as dit, j'ai trouvé la ligne qui plante mais je ne vois pas comment résoudre cela
    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
        Public Sub MAJfichierMaladies(ByVal vChemin As String)
    
            Dim stwMaladies As StreamWriter, vLigne As String, y As Integer
    
            Try
                stwMaladies = New StreamWriter(vChemin, False, Encoding.Default)
                For y = 0 To mnuParametre.grdMaladies.RowCount - 1
                    vLigne = mnuParametre.grdMaladies.Item(0, y).Value.ToString & ";" & mnuParametre.grdMaladies.Item(1, y).Value.ToString
                    stwMaladies.WriteLine(vLigne)
                Next
                stwMaladies.Close()
                stwMaladies = Nothing
    
            Finally
                If Not IsNothing(stwMaladies) Then
                    stwMaladies.Close()
                End If
    
            End Try
    
        End Sub
    le message d'erreur est :
    L'excpetion NullRefeferenceException n'a pas été gérée.

  12. #12
    Expert confirmé
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Par défaut
    Vérifie la valeur des expressions suivantes :
    mnuParametre.grdMaladies.Item(0, y)
    mnuParametre.grdMaladies.Item(0, y).Value
    mnuParametre.grdMaladies.Item(1, y)
    mnuParametre.grdMaladies.Item(1, y).Value

    Si tu en as une seule qui vaut Nothing, c'est que tu as trouvé l'erreur ...

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 16
    Par défaut
    en suivant tes conseils, j'ai résolu le problème en faisant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
                For y = 0 To mnuParametre.grdFourrages.RowCount - 1
                    If (mnuParametre.grdFourrages.Item(0, y).Value IsNot Nothing) And (mnuParametre.grdFourrages.Item(1, y).Value IsNot Nothing) Then
                        vLigne = mnuParametre.grdFourrages.Item(0, y).Value.ToString & ";" & mnuParametre.grdFourrages.Item(1, y).Value.ToString
                        stwFourrages.WriteLine(vLigne)
                    End If
                Next
    et maintenant cela fonctionne parfaitement.
    Merci à tous pour votre patience et vos réponses

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 30/06/2010, 22h15
  2. appeler variable instanciée avec document.observe
    Par super-manu dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 25/08/2008, 14h14
  3. Réponses: 6
    Dernier message: 11/06/2008, 16h48
  4. Instanciation avec JOKER
    Par specsy dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 08/05/2008, 13h18
  5. Instanciation avec parametres depuis un objet Class
    Par TabrisLeFol dans le forum API standards et tierces
    Réponses: 3
    Dernier message: 15/11/2007, 15h16

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