Lecture d'un fichier et conversion [Résolu]

Signaler
Messages postés
4
Date d'inscription
mercredi 28 septembre 2011
Statut
Membre
Dernière intervention
13 octobre 2011
-
Whismeril
Messages postés
14272
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
26 février 2020
-
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

Messages postés
14272
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
26 février 2020
347
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
Messages postés
14655
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
23 février 2020
139
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
Messages postés
4
Date d'inscription
mercredi 28 septembre 2011
Statut
Membre
Dernière intervention
13 octobre 2011

Bonjour,

Je vous joins un screen de ma console :
Messages postés
14655
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
23 février 2020
139
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
Messages postés
642
Date d'inscription
mercredi 10 septembre 2008
Statut
Membre
Dernière intervention
9 février 2017
5
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
Messages postés
4
Date d'inscription
mercredi 28 septembre 2011
Statut
Membre
Dernière intervention
13 octobre 2011

J'ai essayé comme vous l'avez dit dodo7263 mais malheureusement sans succès
Messages postés
14744
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
21 février 2020
91
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...
Messages postés
14272
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
26 février 2020
347
Content de t'avoir aidé.
Qu'est ce qui n'allait pas au final?


Whismeril