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 :

Variable Class et tableaux [Débutant]


Sujet :

VB.NET

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 251
    Points : 85
    Points
    85
    Par défaut Variable Class et tableaux
    Bonjour,

    Je debute en VB + CF3.5.

    Pour réaliser l'enregistrement des mes données, j'ai formaté une structure de donnée à l'aide de class imbriquées. Cette structure de donnée est ensuite sérialisé sans un fichier xml. Pour la partie xml et serialisation, ça fonctionne cependant j'ai besoin de lumiére sur un point :

    Lorsqu'on decrit une class principale, et qu'on la déclare en variable globale publique, je peux tout a fait acceder à ses paramètres (string, entier ...) mais si cette class intégre un tableau composé d'une autre class celui n'est pas accessible car l'instance ne semble pas exister. comment proceder pour l'instancier ? comment savoir si elle existe ou pas, un test sur le .count m'envoie bouler parce qu'elle n'existe pas.

    J'espere être assez clair ???

    Merci d'avance
    N'oubliez pas de lire la FAQ avant de poser une question qui posséde déjà sa réponse !

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par altahir007 Voir le message
    J'espere est assez clair ???
    Non...
    Ce sera sans doute plus clair avec un bout de code

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 251
    Points : 85
    Points
    85
    Par défaut
    Voici : fichier est ma variable principale

    lorsque je veux acceder a fichier.Mestest.count, vb me signal que Mestest n'est pas instancié. le tableau en gros n'existe pas, comment l'initialiser ? peut-on le faire directement dans la déclaration de la structure (peut etre en lui specifiant un min max ?

    apres test : effectivement si je precise Mestest(1000)
    ça fonctionne mais j'aimerai le faire de façon dynamique pour ne pas limiter mes tableaux

    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
     
     
     Public fichier As New MaStructure
     
        Public Class MaStructure
            Public Monprojet As MaStructureProjet
            Public Mestest() As MaStructureTest
        End Class
     
        Public Class MaStructureProjet
            Public numeroprojet As String
            Public client As String
            Public adresse As String
            Public codepostal As String
            Public ville As String
            Public datetravaux As String
        End Class
     
        Public Class MaStructureTest
            Public testdate As String
            Public testtime As String
            Public nom As String
            Public tabbrch() As MaStructurebrcht
     
        End Class
     
        Public Class MaStructurebrcht
            Public nom As String
            Public diametre As Integer
            Public Longueur As Double
        End Class
    N'oubliez pas de lire la FAQ avant de poser une question qui posséde déjà sa réponse !

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 251
    Points : 85
    Points
    85
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
            If fichier.Mestest Is Nothing Then
                ReDim fichier.Mestest(1)
            Else
                ReDim fichier.Mestest(fichier.Mestest.Count + 1)
            End If
     
            MsgBox(CStr(fichier.Mestest.Count))
    ça semble etre assez proche de ça ?
    N'oubliez pas de lire la FAQ avant de poser une question qui posséde déjà sa réponse !

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Tu peux l'initialiser dans le constructeur de MaStructure:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        Public Class MaStructure
            Public Monprojet As MaStructureProjet
            Public Mestest() As MaStructureTest
     
            Public Sub New()
                Redim Mestest(10)
            End Sub
        End Class
    Par contre ça suppose de connaitre à l'avance la taille du tableau... tu ferais sans doute mieux d'utiliser une List(Of MaStructureTest)

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 251
    Points : 85
    Points
    85
    Par défaut
    interessant mais ne sachant pas la taille de mes tableaux à l'avance, je vais y aller en dynamique, j'ai un peu fouillé sur google. ça semble interessant.

    list ? qu'est ce donc ?

    http://msdn.microsoft.com/fr-fr/library/6sh2ey19.aspx

    effectivement c'est exactement ce qu'il me faut ! avec des add, tri ... etc. c'est parfait ! Merci beaucoup. Delphi me semble petit à petit moins interessant ... même l'environnement visual studio est très agréable ! Avec en plus ton coup de main, ça me permet d'avancer lentement mais surement.

    N'oubliez pas de lire la FAQ avant de poser une question qui posséde déjà sa réponse !

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 251
    Points : 85
    Points
    85
    Par défaut
    bon je ne comprend pas vraiment : j'ai utilisé maintenant les list ça donne ceci

    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
     
    Public fichier As New MaStructure
     
        Public Class MaStructure
            Public Monprojet As MaStructureProjet
            Public Mestest As list(of MaStructureTest)
        End Class
     
        Public Class MaStructureProjet
            Public numeroprojet As String
            Public client As String
            Public adresse As String
            Public codepostal As String
            Public ville As String
            Public datetravaux As String
        End Class
     
        Public Class MaStructureTest
            Public testdate As String
            Public testtime As String
            Public nom As String
            Public tabbrch As list(of MaStructurebrcht)
     
        End Class
     
        Public Class MaStructurebrcht
            Public nom As String
            Public diametre As Integer
            Public Longueur As Double
        End Class
    si je fais un fichier.Mestest.add( .....) que dois-je lui indiquer en paramètre ? une variable du type MaStructureTest ? ça ne semble pas fonctionner
    N'oubliez pas de lire la FAQ avant de poser une question qui posséde déjà sa réponse !

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 251
    Points : 85
    Points
    85
    Par défaut
    ok j'ai trouvé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public Mestest As New List(Of MaStructureTest)
    Encore une question : si je créé une liste de Double pour un tableau de valeur de pression, le fichier xml généré va présenter autant de ligne que de valeur double enregistré. Sachant que je vais avoir en moyenne 50 Mastructuretest comprenant 5 tableau de 300 à 1000 valeur double, y-a-t-il une solution plus propre pour enregistrer tout ça ? avec separateur ";" par exemple

    <tableau>0.1;0.1;0.2;0.2; ... 0.2</tableau>
    <nombreenregistrement>300
    N'oubliez pas de lire la FAQ avant de poser une question qui posséde déjà sa réponse !

  9. #9
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    oui, y a moyen de bidouiller... tu utilises la sérialisation XML ?

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 251
    Points : 85
    Points
    85
    Par défaut
    oui exactement :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    Dim serializer As New XmlSerializer(GetType(MaStructure))
    Dim writer As New StreamWriter(StatusBar1.Text)
     
    serializer.Serialize(writer, fichier)
    writer.Close()
    N'oubliez pas de lire la FAQ avant de poser une question qui posséde déjà sa réponse !

  11. #11
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    OK, regarde ici alors :

    http://tlevesque.developpez.com/dotn...ization/#LII-G

    C'est du C#, mais le principe est le même : au lieu de sérialiser directement la liste, tu sauvegardes une propriété qui convertit la liste en texte (et inversement)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <XmlIgnore()>
    Public ListePression As List(Of Double)
     
    <XmlElement("ListePression")>
    Public Property ListePressionXml() As String
        Get
            Return String.Join(";", ListePression.Select(Function(d) d.ToString(CultureInfo.InvariantCulture)))
        End Get
        Set(ByVal value As String)
            ListePression = value.Split(New Char() { ";"c }).Select(Function(s) Double.Parse(s, CultureInfo.InvariantCulture)).ToList()
        End Set
    End Property

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 251
    Points : 85
    Points
    85
    Par défaut
    ça semble assez simple et tellement pratique

    je découvre même des fonction string.join ou value.split ou double.parse

    j'hallucine un peu sur tout ce que j'ai a apprendre mais ça semble super interesssant. Merci pour ton aide


    N'oubliez pas de lire la FAQ avant de poser une question qui posséde déjà sa réponse !

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 251
    Points : 85
    Points
    85
    Par défaut
    La culture dite indifférente est non dépendante de la culture. Vous pouvez spécifier la culture dite indifférente par son nom à l'aide d'une chaîne vide ("") ou par son identificateur de culture 0x007F. InvariantCulture récupère une instance de la culture dite indifférente. Elle est associée à la langue anglaise, mais n'est associée à aucun pays/à aucune région. Elle peut être utilisée dans quasiment n'importe quelle méthode de l'espace de noms Globalization requérant une culture.

    http://msdn.microsoft.com/fr-fr/libr...(v=vs.80).aspx

    ok j'ai compris, j'ai par contre du ajouter

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Imports System.Globalization
    N'oubliez pas de lire la FAQ avant de poser une question qui posséde déjà sa réponse !

  14. #14
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Non, c'est une propriété statique de la classe CultureInfo

    CultureInfo.InvariantCulture

    Pour l'utiliser il faut importer le namespace System.Globalization

    En fait je précise la culture pour que les nombres soient bien écrits au format anglophone, avec un point comme séparateur décimal (par défaut c'est une virgule sur un OS français). InvariantCulture représente la culture "neutre", qui correspond grosso-modo à l'anglais US

  15. #15
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 251
    Points : 85
    Points
    85
    Par défaut
    ok c'est beaucoup plus clair avec ton explication. Merci pour ton aide encore
    N'oubliez pas de lire la FAQ avant de poser une question qui posséde déjà sa réponse !

  16. #16
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 251
    Points : 85
    Points
    85
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <XmlIgnore()> Public ListePression As New List(Of Double)
    <XmlElement("ListePression")> Public Property ListePressionXml() As String
    j'ai une exception que je n'arrive pas a lever, je cherche en vain ...

    {"InvalidCastException"}

    j'ai assigné pourtant des valeurs à listePressionavant d'appeler la lecture de la propriété ListePressionXml pour l'afficher dans un Msgbox.

    en sérialisant j'avais un problème, j'ai essayé de cibler le soucis, ce Select pose problème
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ListePression.Select(Function(d) d.ToString(CultureInfo.InvariantCulture))

    en cherchant un peu ToString renvoi DBNull si il y a rien dans ma liste n'est jamais vide, non ?
    N'oubliez pas de lire la FAQ avant de poser une question qui posséde déjà sa réponse !

  17. #17
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Bah ça vient pas du code que je t'ai donné, vu qu'il n'y a aucun cast dans ce code...

    Et ToString ne peut pas renvoyer DbNull, ça renvoie forcément une chaine de caractères. DbNull, c'est quand tu récupères une valeur nulle d'une base de données.

    Montre moi un peu plus de code, parce que pour l'instant je vois pas d'où ça peut venir...

  18. #18
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    L'exception se produit à quelle ligne ?

  19. #19
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 251
    Points : 85
    Points
    85
    Par défaut
    ligne 59

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    serializer.Serialize(writer, fichier)
    N'oubliez pas de lire la FAQ avant de poser une question qui posséde déjà sa réponse !

  20. #20
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Bizarre... je ne vois pourtant rien qui cloche
    Tu peux montrer aussi la pile de l'exception (StackTrace) ?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Variable, classe, novice
    Par eltamatrox dans le forum C#
    Réponses: 11
    Dernier message: 08/06/2010, 15h25
  2. Passage variable classe fille -> classe mère
    Par Vincent F dans le forum C#
    Réponses: 4
    Dernier message: 13/07/2009, 17h46
  3. [PHP 5.3] Portée de variable: class > include > fonction
    Par Yanonix dans le forum Langage
    Réponses: 8
    Dernier message: 06/02/2009, 23h43
  4. Réponses: 2
    Dernier message: 11/07/2007, 10h40
  5. [POO] Portée des variables, classe....
    Par Avatar dans le forum Langage
    Réponses: 3
    Dernier message: 27/11/2005, 21h25

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