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 :

Aide sur un programme (plusieurs questions) [Débutant]


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Décembre 2014
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2014
    Messages : 75
    Par défaut Aide sur un programme (plusieurs questions)
    Bonjour à tous.
    Il y à peut de temps, j'avais posté sur le forum une demande d'aide pour lire une liste dans un fichier de plusieurs liste et savoir où s’arrêter pour interpréter les différentes listes. Exemple : dans mon fichier j'ai
    "Liste 1
    argument 1
    argument 2
    etc...
    Fin liste 1

    Liste 2 :
    Argument 1
    etc...
    Fin liste 2

    etc...
    "
    Sachant qu'à la fin des arguments d'une liste, je n'avais pas "fin de liste X" mais bien "argument X".

    On m'à alors redirigé vers une solution bien plus simple : un fichier XML.
    Je ne connaissait pas du tout alors j'ai essayé de comprendre les exemples qu'on me donnait et à force de bidouiller et lire relire et l’exécution en pas à pas de visual studio 2013, j'ai compris a peut près ce que je faisait.

    Seulement j'ai d'autres problèmes qui s'offrent à moi à présent.

    Voici mon code, je vous explique après. (ps : si trop compliqué vous pouvez me mp j'essayerais de clarifier les choses.)

    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
    Structure Elève
        Dim nom As String
        Dim prenom As String
        Dim classe As String
        Dim devoirs As String
        Dim exercice As String
        Dim note() As Integer
    End Structure
     
    <XmlRoot("lesclasses")>
    Public Class LesClasses
        <XmlElement("classe")>
        Public Property Classes As New List(Of Classe)
    End Class
     
    Public Class Classe
        <XmlAttribute("nomclasse")>
        Public Property Classe As String = ""
        <XmlElement("eleve")>
        Public Property Eleves As New List(Of Eleve)
    End Class
     
    Public Class Eleve
        <XmlAttribute("nom")>
        Public Property Nom As String = ""
        <XmlAttribute("prenom")>
        Public Property Prenom As String = ""
        <XmlElement("devoir")>
        Public Property Devoirs As New List(Of Devoir)
    End Class
     
    Public Class Devoir
        <XmlAttribute("exercice")>
        Public Property Exercice As String = ""
        <XmlAttribute("note")>
        Public Property Note As Integer = 0
    End Class
    ceci est la partie des classes du fichier XML. (j'ai rajouter une structure pour réaliser un tableau des élèves présent dans mon fichier). Judicieux ?? Pour moi il existe plus simple je pense que c'est de la bidouille. J'attends vos commentaires/critiques/aide.

    Ensuite la partie lecture de mon fichier XML :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Function LitDataXMLClasses(ByVal filename As String) As LesClasses
            Try
                Using objStreamReader As New IO.StreamReader(filename)
                    Try
                        Return DirectCast((New Xml.Serialization.XmlSerializer(GetType(LesClasses))).Deserialize(objStreamReader), LesClasses)
                    Catch ex As Exception
                        MessageBox.Show("Echec de la lecture." & ex.Message)
                    End Try
                End Using
            Catch ex As Exception
                MessageBox.Show("Fichier inaccessible." & ex.Message)
            End Try
            Return Nothing
        End Function
    Rien a rajouter je pense.

    Et là : la seconde partie qui me pose problème :

    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
    Dim Classesel(compteur_el) As Elève
        Dim compteur_el As Integer = 0
        Dim compteur_dev As Integer = 0
        Dim Data As LesClasses = LitDataXMLClasses("classes.xml")
     
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            For Each cl As Classe In Data.Classes
                For Each el As Eleve In cl.Eleves
                    Classesel(compteur_el).nom = el.Nom
                    Classesel(compteur_el).prenom = el.Prenom
                    ComboBox1.Items.Add(Classesel(compteur_el).nom & " " & Classesel(compteur_el).prenom)
                    Classesel(compteur_el).classe = cl.Classe
                    For Each no As Devoir In el.Devoirs
                        Classesel(compteur_el).note(compteur_dev) = no.Note
                    Next
                    compteur_el += 1
                    ReDim Preserve Classesel(compteur_el)
                Next
            Next
        End Sub
    Lors du chargement de ma page donc, je vais lire le fichier XML et j'ajoute les noms des élèves dans une combobox.
    Là ou j'ai un problème c'est à cette ligne : "Classesel(compteur_el).note(compteur_dev) = no.Note"
    un tableau dans un tableau ça ne prends pas.
    J'ai alors pensé à créer un autre tableau portant le même numéro que chaque élèves dans lequel je rajouterais les notes. Encore de la bidouille.
    Je n'ai pas compris pourquoi je ne peux pas creer un tableau de notes dans mon tableau d’élèves. Il me met ce message d'erreur :
    "Une exception non gérée du type 'System.NullReferenceException' s'est produite dans Bidouille XML.exe
    Informations supplémentaires : La référence d'objet n'est pas définie à une instance d'un objet." sur ma ligne. Si j'enlève le tableau j'ai qu'une note et ça fonctionne.

    Voila. En gros j'aimerais optimiser tout ça et comprendre pourquoi je ne peux pas créer mon tableau de notes dans mon tableau d'élèves.
    Merci.

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Par défaut
    Bonjour,

    Il faut redimensionner le tableau de note avant de mettre la note dedans.
    Tu devrais utiliser directement les collections.
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  3. #3
    Membre confirmé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Décembre 2014
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2014
    Messages : 75
    Par défaut
    C'est à dire des collections ?

  4. #4
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Par défaut
    En gros cà doit donner ça :
    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
            For Each cl As Classe In Data.Classes
                ReDim Preserve Classesel(cl.Eleves.Count - 1)
                For Each el As Eleve In cl.Eleves
                    Classesel(compteur_el).nom = el.Nom
                    Classesel(compteur_el).prenom = el.Prenom
                    ComboBox1.Items.Add(Classesel(compteur_el).nom & " " & Classesel(compteur_el).prenom)
                    Classesel(compteur_el).classe = cl.Classe
                    compteur_dev = 0
                    ReDim Classesel(compteur_el).note(el.Devoirs.Count - 1)
                    For Each no As Devoir In el.Devoirs
                        compteur_dev += 1
                        Classesel(compteur_el).note(compteur_dev) = no.Note
                    Next
                    compteur_el += 1
                Next
            Next
    Après tu vas utiliser ton tableau pour travailler.
    Alors pourquoi ne pas directement travailler avec les collections de tes classes ?
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  5. #5
    Membre confirmé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Décembre 2014
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2014
    Messages : 75
    Par défaut
    Ah ok oui je le voyais plus lisible mais au final c'est plus fouillis effectivement. Merci .

  6. #6
    Membre confirmé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Décembre 2014
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2014
    Messages : 75
    Par défaut
    Et pour écrire dans le XML ?
    Vous m'aviez donné comme code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub EcritDataXMLClasses(ByVal filename As String, lesClasses As LesClasses)
            Try
                Using objStreamWriter As StreamWriter = New StreamWriter(filename)
                    Try
                        Dim xsClasses As New Xml.Serialization.XmlSerializer(GetType(LesClasses), New Xml.Serialization.XmlRootAttribute("lesclasses"))
                        xsClasses.Serialize(objStreamWriter, lesClasses)
                    Catch ex As Exception
                        MessageBox.Show("Echec de l'écriture." & ex.Message)
                    End Try
                End Using
            Catch ex As Exception
                MessageBox.Show("Fichier inaccessible." & ex.Message)
            End Try
        End Sub
    J'arrive effectivement à copier le fichier en mettant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    EcritDataXMLClasses("essaisXML.XML", Data)
    grâce à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim Data As LesClasses = LitDataXMLClasses("classes.xml")
    Mais même en créant un nouvel objet "lesclasses" je n'arrive pas à ajouter des données style "Data1.classe = "6ème" où même ajouter un élève grace à ce data.
    j'avoue que je patauges un peut dans la semoule là :/

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

Discussions similaires

  1. Aide sur un programme Client Serveur
    Par clubmed01 dans le forum Linux
    Réponses: 33
    Dernier message: 29/05/2012, 10h22
  2. Besoin d'aide sur un programme
    Par chuko dans le forum C
    Réponses: 22
    Dernier message: 14/06/2008, 17h33
  3. [VB6] Demande d'aide sur un programme !
    Par Lucas42 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 16/06/2006, 11h49

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