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

Benn090 4 Messages postés mercredi 28 septembre 2011Date d'inscription 13 octobre 2011 Dernière intervention - 12 oct. 2011 à 23:11 - Dernière réponse : Whismeril 11419 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 24 avril 2018 Dernière intervention
- 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 !
Afficher la suite 

8 réponses

Répondre au sujet
Whismeril 11419 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 24 avril 2018 Dernière intervention - 13 oct. 2011 à 08:22
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Whismeril
NHenry 14134 Messages postés vendredi 14 mars 2003Date d'inscription 23 avril 2018 Dernière intervention - 12 oct. 2011 à 23:31
0
Utile
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
Commenter la réponse de NHenry
Benn090 4 Messages postés mercredi 28 septembre 2011Date d'inscription 13 octobre 2011 Dernière intervention - 12 oct. 2011 à 23:40
0
Utile
Bonjour,

Je vous joins un screen de ma console :
Commenter la réponse de Benn090
NHenry 14134 Messages postés vendredi 14 mars 2003Date d'inscription 23 avril 2018 Dernière intervention - 12 oct. 2011 à 23:55
0
Utile
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
Commenter la réponse de NHenry
dodo7263 642 Messages postés mercredi 10 septembre 2008Date d'inscription 9 février 2017 Dernière intervention - 13 oct. 2011 à 00:02
0
Utile
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
Commenter la réponse de dodo7263
Benn090 4 Messages postés mercredi 28 septembre 2011Date d'inscription 13 octobre 2011 Dernière intervention - 13 oct. 2011 à 00:17
0
Utile
J'ai essayé comme vous l'avez dit dodo7263 mais malheureusement sans succès
Commenter la réponse de Benn090
BunoCS 13773 Messages postés lundi 11 juillet 2005Date d'inscription 24 avril 2018 Dernière intervention - 14 oct. 2011 à 16:56
0
Utile
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...
Commenter la réponse de BunoCS
Whismeril 11419 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 24 avril 2018 Dernière intervention - 15 oct. 2011 à 12:08
0
Utile
Content de t'avoir aidé.
Qu'est ce qui n'allait pas au final?


Whismeril
Commenter la réponse de Whismeril

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.