Benn090
Messages postés4Date d'inscriptionmercredi 28 septembre 2011StatutMembreDernière intervention13 octobre 2011
-
12 oct. 2011 à 23:11
Whismeril
Messages postés18404Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention30 mai 2023
-
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.
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.
NHenry
Messages postés15069Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention29 mai 2023158 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
NHenry
Messages postés15069Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention29 mai 2023158 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
Vous n’avez pas trouvé la réponse que vous recherchez ?
dodo7263
Messages postés616Date d'inscriptionmercredi 10 septembre 2008StatutMembreDernière intervention 9 février 20176 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".