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 :

Opération sur collection


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 22
    Par défaut Opération sur collection
    Bonjour,
    je travaille avec un fichier XmL qui contient des données qui me sont utiles pour dessiner un plan, des coordonnées, code couleur RGB (structure du XmL plus bas).

    J'arrive à lire mon XmL, soit en récupérant chaque colonne une à une (tous les X1, puis tous les Y1 etc) avec un foreach datarow, soit en récupérant tout les attributs entre les balises <Legende></Legende> avec une boucle for et un XmLAttributeCollection.

    Mon problème est que je récupère dans les deux cas une collection que je n'arrive pas à manipuler (accéder à chaque valeur), car je voudrais par la suite dessiner mon plan à partir des X et Y récupérer (en passant par les polygon par exemple);



    La structure du XmL est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <Plan name="Test">
    - <Legende name="Salle1" support="Bat1">
      <Shape x1="0.000000" y1="0.000000" x2="0.000000" y2="1.000000" type="1" r="0" g="0" b="255" /> 
      <Shape x1="0.000000" y1="0.000000" x2="1.000000" y2="0.000000" type="1" r="0" g="0" b="255" /> 
      <Shape x1="1.000000" y1="1.000000" x2="0.000000" y2="1.000000" type="1" r="0" g="0" b="255" /> 
      <Shape x1="1.000000" y1="1.000000" x2="1.000000" y2="0.000000" type="1" r="0" g="0" b="255" /> 
      </Legende>
    - <Legende name="Salle1" support="Bat2">
      <Shape x1="0.000000" y1="0.000000" x2="1.000000" y2="1.000000" type="1" r="0" g="0" b="255" /> 
      <Shape x1="0.000000" y1="1.000000" x2="1.000000" y2="0.000000" type="1" r="0" g="0" b="255" /> 
      </Legende>
    </Plan>
    Si quelqu'un sait comment faire ou a une autre méthode plus pratique je suis preneur de toutes explications !

    Merci d'avance !

  2. #2
    Membre éprouvé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2006
    Messages
    1 627
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 627
    Par défaut
    A pas tout compris

    On pourrait savoir quel est ton type de Collection ? Ainsi que le code pour le parse/parcours de cette collection ?

  3. #3
    Membre confirmé Avatar de Klivor
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    143
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 143
    Par défaut
    Pourquoi n'essaye tu pas de faire un for each pour la collection que tu récupéres.

    Ex: foreach(Object toto in TaCollection)
    { ....
    ....
    }

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 22
    Par défaut
    Je vais détailler un peut mieux désolé ^^

    Voila mon code pour recuperer la colonne des X1 par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
                XmlDocument doc = new XmlDocument();
                doc.Load(@"C:\Dossier\Fichier.xml");
                DataSet datasetfic = new DataSet();
                datasetfic.ReadXml(@"C:\Dossier\Fichier.xml");
                    foreach (DataRow legend in datasetfic.Tables[2].Rows)
                         {               
                                Console.WriteLine(legend["x1"]);           
                         }
    Là j'affiche tous les X1 que j'ai récupérer et qui sont dans "legend", j'aimerais pouvoir accéder à chaque données de "legend" (comme dans un tableau) pour affecter mon premier 'X1 Y1' puis 'X2 Y2' etc à une collection de points que j'utilise afin de dessiner mon plan.

    En fait je ne sais pas du tout comment gérer la collection que je récupère, ni même si je m'y prends bien pour ce que je veux faire.

    J'espère avoir été plus clair, si il vous faut plus de précision je reste dans le coin

  5. #5
    Membre éprouvé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2006
    Messages
    1 627
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 627
    Par défaut
    je dirai un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     foreach (System.Data.DataTable dt in datasetfic.Tables)
                {
                    //On est dans la légende
                    foreach (System.Data.DataRow dr in dt.Rows)
                    {
                        //On est dans la shape
                        double x1 = double.Parse(dr["x1"].ToString());
                        double x2 = double.Parse(dr["x2"].ToString());
                        double y1 = double.Parse(dr["y1"].ToString());
                        double y2 = double.Parse(dr["y2"].ToString());
                        //...
                        //Suite de la lecture, à toi de voir ce que tu fais des informations
                    }
                }
    foreach imbriqués, tu parcours l'ensemble de tes éléments, il te reste à lire les attributs qui t'intéressent

    je garantis rien, j'utilise presque pas les DataSet...

    A l'occasion jette un oeil sur LinqToXML, mais c'est en complément.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 22
    Par défaut
    Tout d'abord merci de prendre le temps de m'aider

    Si j'utilise ton bout de code, pas de soucis de compilation mais lors de l'exécution il me lève une exception
    La colonne 'x1' n'appartiens pas a la table 'Plan'.
    Je suppose qu'on est encore dans la balise globale 'plan' en fait, j'ai donc essayer d'appliquer votre "double.parse" à mon bout de code qui génère la collection :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    foreach (DataRow legend in datasetfic.Tables[2].Rows)
                {               
                    Console.WriteLine(legend["x1"].ToString());                
                        double x1 = double.Parse(legend["x1"].ToString());
                        double x2 = double.Parse(legend["x2"].ToString());
                        double y1 = double.Parse(legend["y1"].ToString());
                        double y2 = double.Parse(legend["y2"].ToString());           
                }
    Et là une autre exception lors de premier parse :
    Le format de la chaîne d'entrée est incorrect.
    Le "Console.WriteLine(legend["x1"].ToString());" m'affiche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    0.000000
    0.000000
    1.000000
    1.000000
    0.000000
    0.000000
    0.166000
    0.166000
    0.166000
    0.166000
    ...
    Et je souhaite pouvoir avoir accès a chacune des valeurs indépendamment.

    J'utilise des DataSet mais ce n'est pas une obligation, si vous avez d'autres moyens plus rapide ou plus sûr je suis preneur

    Merci d'avance

  7. #7
    Membre Expert Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    As-tu le xsd associé à ce fichier xml ? Si c'est le cas, tu peux l'intégrer à ton projet, et demander à l'outil qui va bien de générer automatiquement un dataset typé.

Discussions similaires

  1. Réponses: 3
    Dernier message: 03/11/2016, 12h28
  2. Opérations sur les matrices...
    Par aokiseiichiro dans le forum C
    Réponses: 32
    Dernier message: 28/07/2005, 17h10
  3. opération sur fermeture de fenêtre
    Par java_math dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 20/06/2004, 22h52
  4. opérations sur les bits d'un byte
    Par petitours dans le forum C++Builder
    Réponses: 4
    Dernier message: 10/02/2004, 20h42
  5. opérations sur les dates
    Par coucoucmoi dans le forum Débuter
    Réponses: 2
    Dernier message: 12/08/2003, 11h45

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