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 19024 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 18 avril 2024 - 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 19024 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 18 avril 2024 656
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 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
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 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
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 614 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 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 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 19024 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 18 avril 2024 656
15 oct. 2011 à 12:08
Content de t'avoir aidé.
Qu'est ce qui n'allait pas au final?


Whismeril
0
Rejoignez-nous