Lecture d'un fichier et conversion

Résolu
Benn090
Messages postés
4
Date d'inscription
mercredi 28 septembre 2011
Statut
Membre
Dernière intervention
13 octobre 2011
- 12 oct. 2011 à 23:11
Whismeril
Messages postés
17474
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
1 juillet 2022
- 15 oct. 2011 à 12:08
Bonjour à tous,

Je dois ouvrir un fichier en format csv et le convertir en format svg, mon code est le suivant :
class Dessin
    {
        private List<Element> listElement;

        public Dessin()
        {
            List<Element> listElement = new List<Element>();
        }

        public List<Element> Read_CSV(string source) 
        {
            StreamReader monStreamReader = new StreamReader(source); 

            string ligne = monStreamReader.ReadLine();
            while (ligne != null)
            {
                string[] temp = ligne.Split(';');

                try
                {
                    switch (temp[0])
                    {

                        case "Cercle":

                            Element cercle = new Cercle(int.Parse(temp[1]), int.Parse(temp[2]), int.Parse(temp[3]), int.Parse(temp[4]), int.Parse(temp[5]), int.Parse(temp[6]), int.Parse(temp[7]), int.Parse(temp[8]));
                            listElement.Add(cercle);
                         
                            break;

                        case "Ellipse":


                            Element ellipse = new Ellipse(int.Parse(temp[1]), int.Parse(temp[2]), int.Parse(temp[3]), int.Parse(temp[4]), int.Parse(temp[5]), int.Parse(temp[6]), int.Parse(temp[7]), int.Parse(temp[8]), int.Parse(temp[9]));
                            listElement.Add(ellipse);
                        
                            break;

                        case "Rectangle":

                            Element rectangle = new Rectangle(int.Parse(temp[1]), int.Parse(temp[2]), int.Parse(temp[3]), int.Parse(temp[4]), int.Parse(temp[5]), int.Parse(temp[6]), int.Parse(temp[7]), int.Parse(temp[8]), int.Parse(temp[9]));
                            listElement.Add(rectangle);
                    
                            break;

                        case "Polygone":

                            Element polygone = new Polygone(int.Parse(temp[1]), temp[2], int.Parse(temp[3]), int.Parse(temp[4]), int.Parse(temp[5]), int.Parse(temp[6]));
                            listElement.Add(polygone);

              
                            break;

                        case "Texte":
                            Element texte = new Texte(int.Parse(temp[1]), int.Parse(temp[2]), int.Parse(temp[3]), temp[4], int.Parse(temp[5]), int.Parse(temp[6]), int.Parse(temp[7]), int.Parse(temp[8]));
                            listElement.Add(texte);
                     
                            break;

                        case "Chemin":

                            Element path = new Chemin(int.Parse(temp[1]), temp[2], int.Parse(temp[3]), int.Parse(temp[4]), int.Parse(temp[5]), int.Parse(temp[6]));
                            listElement.Add(path);
                       
                            break;

                    }
                }



                catch (Exception e)
                {
                    Console.WriteLine("ligne: " + ligne + " " + e);
                }
            ligne = monStreamReader.ReadLine();

            }

            monStreamReader.Close();
            return listElement;
        }

        public void Write_SVG(String csv, List<Element> listElement)
        {
            StreamWriter Writer = new StreamWriter(csv);
            Writer.WriteLine(" <svg xmlns="http://www.w3.org/2000/svg" version="1.1"> ");
            foreach (Element val in listElement)

            { Writer.WriteLine(val); }
            
            Writer.WriteLine("</svg>");
            Writer.Close();
        }

    }
}


et dans mon main j'ai ceci
 List<Element> listElement = new List<Element>(); 


            Dessin d = new Dessin() ;
            d.Read_CSV("I:\\tp5 projet\\ExempleTout.csv");

            foreach (Element e in listElement)
            { Console.WriteLine(e); }
            
            d.Write_SVG(" I:\\tp5 projet\\test.svg", listElement);


Mais le problème quand je compile j'ai ce message là : " System.NullReferenceEcxeption: La référence d'objet n'est pas définie à une instance d'un objet.

Et dans le fichier svg que j'ai créé je n'ai pas ma listElement mais seulement mes balises. Je me doute que j'ai pas bien ouvert mon fichier csv dans ma liste mais je vois pas trop où j'ai faux.

Merci pour votre aide !

8 réponses

Whismeril
Messages postés
17474
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
1 juillet 2022
600
13 oct. 2011 à 08:22
Bonjour,

c'est le sujet à la mode en ce moment!

Tu dervais "retirer" le try et la clause catch dans ta méthode Read.
Ainsi à l'exécution cela planterai à une ligne précise.
A cette ligne une variable n'est pas déclarée "System.NullReferenceEcxeption: La référence d'objet n'est pas définie à une instance d'un objet."

Un autre point, tu déclares un "listElement" sur toute la classe et tu as un "listElement" en paramètre dans ta méthode Write_SVG, normalement le compilateur s'en débrouille, mais on ne sait jamais.

Tu peux soit en renommer un, soit déclarer le premier juste sur la méthode Read.

Whismeril
3
NHenry
Messages postés
14941
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
20 juin 2022
161
12 oct. 2011 à 23:31
Bonjour,

Sur quelle ligne ?
Quelles sont les valeurs sur la ligne ?

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS et aussi ce lien[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
0
Benn090
Messages postés
4
Date d'inscription
mercredi 28 septembre 2011
Statut
Membre
Dernière intervention
13 octobre 2011

12 oct. 2011 à 23:40
Bonjour,

Je vous joins un screen de ma console :
0
NHenry
Messages postés
14941
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
20 juin 2022
161
12 oct. 2011 à 23:55
Bonjour,

A quelle ligne de code cela correspond ?
Visiblement, Tu as une erreur dans une boucle, mais sans plus d'information, impossible de dire quoi que ce soit.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS et aussi ce lien[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
dodo7263
Messages postés
616
Date d'inscription
mercredi 10 septembre 2008
Statut
Membre
Dernière intervention
9 février 2017
6
13 oct. 2011 à 00:02
Salut,

Ce que je vois (si je peux voir encore quelque chose à cette heure !), dans ton main tu déclares un nouveau listElement que tu utilises dans ta méthode write_SVG(). Tu n'utilises pas le retour de ta fonction read_csv() ?

Si j'ai bien compris tu lis ton csv et tu l'écris dans un svg.

J'aurais plutôt vu un truc du genre dans ton main :

List<Element> listElement = new List<Element>(); 

Dessin d = new Dessin() ;
listElement = d.Read_CSV("I:\\tp5 projet\\ExempleTout.csv");

foreach (Element e in listElement)
{ 
     Console.WriteLine(e); 
}
            
d.Write_SVG(" I:\\tp5 projet\\test.svg", listElement);


Voila j'espère que ca te mettra sur une piste au moins

@pluche

SD


[b]"Chez ceux qui semblent très vertueux se cachent en général la vanité, l'orgueil, l'intolérance".

P.Coehlo (Maktub 2004)/b
0
Benn090
Messages postés
4
Date d'inscription
mercredi 28 septembre 2011
Statut
Membre
Dernière intervention
13 octobre 2011

13 oct. 2011 à 00:17
J'ai essayé comme vous l'avez dit dodo7263 mais malheureusement sans succès
0
BunoCS
Messages postés
15266
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
24 juin 2022
103
14 oct. 2011 à 16:56
Hello,
Ta méthode WriteSVG est un peu légère non? Je pense que tu as un certain format à respecter dans ton fichier svg...


@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
Whismeril
Messages postés
17474
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
1 juillet 2022
600
15 oct. 2011 à 12:08
Content de t'avoir aidé.
Qu'est ce qui n'allait pas au final?


Whismeril
0