CSV vers SVG

cindoo Messages postés 27 Date d'inscription vendredi 11 juin 2010 Statut Membre Dernière intervention 11 janvier 2012 - 10 oct. 2011 à 18:00
Whismeril Messages postés 18018 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 4 décembre 2022 - 14 oct. 2011 à 23:17
Bonjour j'ai un exercice à faire dans lequel je dois convertir un fichier cvs en svg sur visual studio en C#.

j'ai effectué un streamreader afin de lire le fichier cvs mais je bloque pour le streamwriter.

j'aimerais savoIR si quelqu'un pourrait m'aider???
je vous envoi une partie de l'enoncé:

Des dessins, utilisant des formes simples (cercle, carré, rectangle,...) sont émis par un logiciel
dans le format csv (attention, le séparateur est le ;). Ce format décrit chaque forme, sa couleur,
la couleur des traits, son ordre d’affichage.... Afin de les visualiser, l’objectif de ce problème est
de proposer un programme permettant de convertir ces fichiers csv vers un format affichable très
facilement : le svg. Un fichier d’extension .svg est un fichier texte, comme le format csv, qui
contient une information structurée. Par exemple le fichier cercle.svg décrit un cercle :
<svg xmlns="http://www.w3.org/2000/svg" version="1.1">
<circle cx="100" cy="50" r="40" style="fill:rgb(255,255,0)" />
</svg>


je peux vous envoyer l'exercie et ce que j'ai deja fait si vous le desirez.

merci

cindy

11 réponses

cindoo Messages postés 27 Date d'inscription vendredi 11 juin 2010 Statut Membre Dernière intervention 11 janvier 2012
11 oct. 2011 à 12:38
Bonjour,

merci d'avoir repondu a mon message je n'attends pas le code tout fait juste une piste pour commencer parce que la je suis perdu.

j'ai aussi un probleme dans mon streamreader :

if (temp[0]=="Chemin")
{
int ordre = int.Parse(temp[6]);
int idElement = int.Parse(temp[1]);
string chemin = string.Parse(temp[2]);
int R = int.Parse(temp[3]);
int G= int.Parse(temp[4]);
int B = int.Parse(temp[5]);

Couleur coul4 = new Couleur(R, G, B);

Chemin che=new Chemin (idElement,coul4,ordre,chemin);
figures.Add(che);
le string.parse ne fonctionne pas que faut-il mettre a la place?

Merci

cindy
0
cindoo Messages postés 27 Date d'inscription vendredi 11 juin 2010 Statut Membre Dernière intervention 11 janvier 2012
11 oct. 2011 à 12:39
je vous envoie le code que j'ai fais pour le moment :

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace ConsoleApplication4
{
class Dessin
{
List<Figure> figures;

public Dessin()
{
figures= new List<Figure>();
}



public void readCSV(string p)
{
// Ouverture du fichier,
StreamReader monStreamReader = new StreamReader(@"C:\Documents and Settings\cghidali\Bureau\tp5(3)\tp5\exemple1.csv");

// Lire la première ligne
string ligne = monStreamReader.ReadLine();

// Tant que la ligne lue n'est pas null
while (ligne != null)
{

string[] temp = ligne.Split(',');

if (temp[0]=="Cercle")
{
int r=int.Parse (temp[4]);
int cx=int.Parse(temp[2]);
int cy = int.Parse(temp[3]);
int R=int.Parse(temp[5]);
int G=int.Parse(temp[6]);
int B=int.Parse(temp[7]);
Couleur coul = new Couleur(R,G,B) ;
int ordre=int.Parse(temp[8]);
int idElement=int.Parse(temp[1]);

Cercle c = new Cercle(idElement, coul, ordre, cx, cy,r);
figures.Add(c);
}

if (temp[0] == "Rectangle")
{
int x1 = int.Parse(temp[2]);
int ordre = int.Parse(temp[9]);
int idElement = int.Parse(temp[1]);
int largeur = int.Parse(temp[4]);
int hauteur = int.Parse(temp[5]);
int y1 = int.Parse(temp[3]);
int R = int.Parse(temp[6]);
int G = int.Parse(temp[7]);
int B = int.Parse(temp[8]);
Couleur coul1 = new Couleur(R, G, B);

Rectangle rec= new Rectangle (idElement,coul1,ordre,x1,y1,largeur,hauteur);
figures.Add(rec);
}

if (temp[0]=="Ellipse")
{
int cx1 = int.Parse(temp[2]);
int ordre = int.Parse(temp[9]);
int idElement = int.Parse(temp[1]);
int ry = int.Parse(temp[4]);
int rx = int.Parse(temp[5]);
int cy1 = int.Parse(temp[3]);
int R = int.Parse(temp[6]);
int G = int.Parse(temp[7]);
int B = int.Parse(temp[8]);
Couleur coul2 = new Couleur(R, G, B);

Ellipse e=new Ellipse (idElement,coul2,ordre,cx1,cy1,rx,ry);
figures.Add(e);
}

if (temp[0]=="Polygone")
{

int ordre = int.Parse(temp[6]);
int idElement = int.Parse(temp[1]);
string points = string.Parse(temp[2]);
int R = int.Parse(temp[3]);
int G= int.Parse(temp[4]);
int B = int.Parse(temp[5]);

Couleur coul3 = new Couleur(R, G, B);

Polygon poly= new Polygon (idElement,coul3,ordre,points);
figures.Add(poly);
}
if (temp[0]=="Chemin")
{
int ordre = int.Parse(temp[6]);
int idElement = int.Parse(temp[1]);
string chemin = string.Parse(temp[2]);
int R = int.Parse(temp[3]);
int G= int.Parse(temp[4]);
int B = int.Parse(temp[5]);

Couleur coul4 = new Couleur(R, G, B);

Chemin che=new Chemin (idElement,coul4,ordre,chemin);
figures.Add(che);

}
if (temp[0]=="Texte")
{
int x2 = int.Parse(temp[2]);
int ordre = int.Parse(temp[9]);
int idElement = int.Parse(temp[1]);
string contenu = string.Parse(temp[4]);

int y2 = int.Parse(temp[3]);
int R = int.Parse(temp[5]);
int G = int.Parse(temp[6]);
int B = int.Parse(temp[7]);
Couleur coul5 = new Couleur(R, G, B);

Texte t=new Texte (idElement,coul5,ordre,x2,y2,contenu);
figures.Add(t);
}





// lire ligne suivante.
ligne = monStreamReader.ReadLine();
}


// Fermeture du StreamReader (attention indispensable)
monStreamReader.Close();
figures.Sort();
for (int i = 0; i < figures.Count; ++i)
{
Console.WriteLine(figures[i]);
}




// Fermeture du StreamReader (attention indispensable)
monStreamReader.Close();
Console.ReadLine();



}

}
}
0
BunoCS Messages postés 15330 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 novembre 2022 103
11 oct. 2011 à 14:37
Plusieurs remarques:
dans le format csv (attention, le séparateur est le ;)

Or, tu fais ceci:
string[] temp = ligne.Split(',');

Déjà là, je pense, y'a un souci.

Ensuite, il faut éviter de tester l'égalité de strings avec "==". Il vaut mieux utiliser CompareTo() De plus, une suite de if comme cela n'est pas optimale. Tu dois utiliser des isntructions if...else ou, mieux, un bloc switch..case car, en C#, tu peux utiliser des chaines de caractères constantes dans les cases.

Après, concernant String.parse...ben...t'en as pas besoin, étant donné que temp[i] est déjà une string.

Enfin,
// Fermeture du StreamReader (attention indispensable) 
monStreamReader.Close(); 
figures.Sort(); 
for (int i = 0; i < figures.Count; ++i) 
{ 
Console.WriteLine(figures[i]); 
}

Au lieu d'écrire dans la console, c'est là que tu dois utiliser le StreamWriter pour écrire ton SVG.

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
cindoo Messages postés 27 Date d'inscription vendredi 11 juin 2010 Statut Membre Dernière intervention 11 janvier 2012
11 oct. 2011 à 14:50
Merci,

Donc au lien d'ecrire un console.writeline je dois faire un streamwriter???

cindy
0

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

Posez votre question
BunoCS Messages postés 15330 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 novembre 2022 103
11 oct. 2011 à 15:00
Yes. Enfin..tu le crées avant la boucles et tu l'utilises pour écrire dans ton fichier dans ta boucle, bien sûr


@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
cindoo Messages postés 27 Date d'inscription vendredi 11 juin 2010 Statut Membre Dernière intervention 11 janvier 2012
12 oct. 2011 à 19:17
bonjour,

je viens de fini mon Write cependant quelques erreurs persiste que je ne comprend pas.

Si quelqu'un voit les erreurs merci de m'aider .

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace ConsoleApplication4
{
class Dessin
{
List<Figure> figures;

public Dessin()
{
figures= new List<Figure>();
}



public void readCSV(string p)
{
// Ouverture du fichier,
StreamReader monStreamReader = new StreamReader(@"C:\Documents and Settings\cghidali\Bureau\tp5(3)\tp5\exemple1.csv");

// Lire la première ligne
string ligne = monStreamReader.ReadLine();

// Tant que la ligne lue n'est pas null
while (ligne != null)
{

string[] temp = ligne.Split(',');

if (temp[0]=="Cercle")
{
int r=int.Parse (temp[4]);
int cx=int.Parse(temp[2]);
int cy = int.Parse(temp[3]);
int R=int.Parse(temp[5]);
int G=int.Parse(temp[6]);
int B=int.Parse(temp[7]);
Couleur coul = new Couleur(R,G,B) ;
int ordre=int.Parse(temp[8]);
int idElement=int.Parse(temp[1]);

Cercle c = new Cercle(idElement, coul, ordre, cx, cy,r);
figures.Add(c);
}

if (temp[0] == "Rectangle")
{
int x1 = int.Parse(temp[2]);
int ordre = int.Parse(temp[9]);
int idElement = int.Parse(temp[1]);
int largeur = int.Parse(temp[4]);
int hauteur = int.Parse(temp[5]);
int y1 = int.Parse(temp[3]);
int R = int.Parse(temp[6]);
int G = int.Parse(temp[7]);
int B = int.Parse(temp[8]);
Couleur coul1 = new Couleur(R, G, B);

Rectangle rec= new Rectangle (idElement,coul1,ordre,x1,y1,largeur,hauteur);
figures.Add(rec);
}

if (temp[0]=="Ellipse")
{
int cx1 = int.Parse(temp[2]);
int ordre = int.Parse(temp[9]);
int idElement = int.Parse(temp[1]);
int ry = int.Parse(temp[4]);
int rx = int.Parse(temp[5]);
int cy1 = int.Parse(temp[3]);
int R = int.Parse(temp[6]);
int G = int.Parse(temp[7]);
int B = int.Parse(temp[8]);
Couleur coul2 = new Couleur(R, G, B);

Ellipse e=new Ellipse (idElement,coul2,ordre,cx1,cy1,rx,ry);
figures.Add(e);
}

if (temp[0]=="Polygone")
{

int ordre = int.Parse(temp[6]);
int idElement = int.Parse(temp[1]);
string points = string.Parse(temp[2]);
int R = int.Parse(temp[3]);
int G= int.Parse(temp[4]);
int B = int.Parse(temp[5]);

Couleur coul3 = new Couleur(R, G, B);

Polygon poly= new Polygon (idElement,coul3,ordre,points);
figures.Add(poly);
}
if (temp[0]=="Chemin")
{
int ordre = int.Parse(temp[6]);
int idElement = int.Parse(temp[1]);
string chemin = string.Parse(temp[2]);
int R = int.Parse(temp[3]);
int G= int.Parse(temp[4]);
int B = int.Parse(temp[5]);

Couleur coul4 = new Couleur(R, G, B);

Chemin che=new Chemin (idElement,coul4,ordre,chemin);
figures.Add(che);

}
if (temp[0]=="Texte")
{
int x2 = int.Parse(temp[2]);
int ordre = int.Parse(temp[9]);
int idElement = int.Parse(temp[1]);
string contenu = string.Parse(temp[4]);

int y2 = int.Parse(temp[3]);
int R = int.Parse(temp[5]);
int G = int.Parse(temp[6]);
int B = int.Parse(temp[7]);
Couleur coul5 = new Couleur(R, G, B);

Texte t=new Texte (idElement,coul5,ordre,x2,y2,contenu);
figures.Add(t);
}





// lire ligne suivante.
ligne = monStreamReader.ReadLine();
}


// Fermeture du StreamReader
monStreamReader.Close();

/// <summary>
/// permet d'ecrire mon fichier en svg
/// </summary>
public void Write()// va ecrire mon fichier csv en svg
{

StreamWriter monStreamWriter = new StreamWriter(fichiersvg);
monStreamWriter.WriteLine("<svg xmlns="http://www.w3.org/2000/svg" version ="1.1">");

Figure.Sort();// va trier les formes pour qu elles apparaissent dans l'ordre

foreach (Forme x in figures)
{
monStreamWriter.WriteLine(x);
}

monStreamWriter.WriteLine("</svg>");
monStreamWriter.Close();

}

figures.Sort();
for (int i = 0; i < figures.Count; ++i)
{
Console.WriteLine(figures[i]);
}




// Fermeture du StreamReader (attention indispensable)
monStreamReader.Close();
Console.ReadLine();


cindy
0
Whismeril Messages postés 18018 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 4 décembre 2022 618
12 oct. 2011 à 20:30
Bonsoir, c'est plus facile à lire avec les balises de code:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.IO; 

namespace ConsoleApplication4 
{ 
class Dessin 
{ 
List<Figure> figures; 

public Dessin() 
{ 
figures= new List<Figure>(); 
} 



public void readCSV(string p) 
{ 
// Ouverture du fichier, 
StreamReader monStreamReader = new StreamReader(@"C:\Documents and Settings\cghidali\Bureau\tp5(3)\tp5\exemple1.csv"); 

// Lire la première ligne 
string ligne = monStreamReader.ReadLine(); 

// Tant que la ligne lue n'est pas null 
while (ligne != null) 
{ 

string[] temp = ligne.Split(','); 

if (temp[0]=="Cercle") 
{ 
int r=int.Parse (temp[4]); 
int cx=int.Parse(temp[2]); 
int cy = int.Parse(temp[3]); 
int R=int.Parse(temp[5]); 
int G=int.Parse(temp[6]); 
int B=int.Parse(temp[7]); 
Couleur coul = new Couleur(R,G,B) ; 
int ordre=int.Parse(temp[8]); 
int idElement=int.Parse(temp[1]); 

Cercle c = new Cercle(idElement, coul, ordre, cx, cy,r); 
figures.Add(c); 
} 

if (temp[0] == "Rectangle") 
{ 
int x1 = int.Parse(temp[2]); 
int ordre = int.Parse(temp[9]); 
int idElement = int.Parse(temp[1]); 
int largeur = int.Parse(temp[4]); 
int hauteur = int.Parse(temp[5]); 
int y1 = int.Parse(temp[3]); 
int R = int.Parse(temp[6]); 
int G = int.Parse(temp[7]); 
int B = int.Parse(temp[8]); 
Couleur coul1 = new Couleur(R, G, B); 

Rectangle rec= new Rectangle (idElement,coul1,ordre,x1,y1,largeur,hauteur); 
figures.Add(rec); 
} 

if (temp[0]=="Ellipse") 
{ 
int cx1 = int.Parse(temp[2]); 
int ordre = int.Parse(temp[9]); 
int idElement = int.Parse(temp[1]); 
int ry = int.Parse(temp[4]); 
int rx = int.Parse(temp[5]); 
int cy1 = int.Parse(temp[3]); 
int R = int.Parse(temp[6]); 
int G = int.Parse(temp[7]); 
int B = int.Parse(temp[8]); 
Couleur coul2 = new Couleur(R, G, B); 

Ellipse e=new Ellipse (idElement,coul2,ordre,cx1,cy1,rx,ry); 
figures.Add(e); 
} 

if (temp[0]=="Polygone") 
{ 

int ordre = int.Parse(temp[6]); 
int idElement = int.Parse(temp[1]); 
string points = string.Parse(temp[2]); 
int R = int.Parse(temp[3]); 
int G= int.Parse(temp[4]); 
int B = int.Parse(temp[5]); 

Couleur coul3 = new Couleur(R, G, B); 

Polygon poly= new Polygon (idElement,coul3,ordre,points); 
figures.Add(poly); 
} 
if (temp[0]=="Chemin") 
{ 
int ordre = int.Parse(temp[6]); 
int idElement = int.Parse(temp[1]); 
string chemin = string.Parse(temp[2]); 
int R = int.Parse(temp[3]); 
int G= int.Parse(temp[4]); 
int B = int.Parse(temp[5]); 

Couleur coul4 = new Couleur(R, G, B); 

Chemin che=new Chemin (idElement,coul4,ordre,chemin); 
figures.Add(che); 

} 
if (temp[0]=="Texte") 
{ 
int x2 = int.Parse(temp[2]); 
int ordre = int.Parse(temp[9]); 
int idElement = int.Parse(temp[1]); 
string contenu = string.Parse(temp[4]); 

int y2 = int.Parse(temp[3]); 
int R = int.Parse(temp[5]); 
int G = int.Parse(temp[6]); 
int B = int.Parse(temp[7]); 
Couleur coul5 = new Couleur(R, G, B); 

Texte t=new Texte (idElement,coul5,ordre,x2,y2,contenu); 
figures.Add(t); 
} 





// lire ligne suivante. 
ligne = monStreamReader.ReadLine(); 
} 


// Fermeture du StreamReader 
monStreamReader.Close(); 

/// <summary> 
/// permet d'ecrire mon fichier en svg 
/// </summary> 
public void Write()// va ecrire mon fichier csv en svg 
{ 

StreamWriter monStreamWriter = new StreamWriter(fichiersvg); 
monStreamWriter.WriteLine("<svg xmlns="http://www.w3.org/2000/svg" version ="1.1">"); 

Figure.Sort();// va trier les formes pour qu elles apparaissent dans l'ordre 

foreach (Forme x in figures) 
{ 
monStreamWriter.WriteLine(x); 
} 

monStreamWriter.WriteLine("</svg>"); 
monStreamWriter.Close(); 

} 

figures.Sort(); 
for (int i = 0; i < figures.Count; ++i) 
{ 
Console.WriteLine(figures[i]); 
} 




// Fermeture du StreamReader (attention indispensable) 
monStreamReader.Close(); 
Console.ReadLine(); 



Whismeril
0
Whismeril Messages postés 18018 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 4 décembre 2022 618
12 oct. 2011 à 20:36
Tu n'as pas corrigé ton split comme te l'a indiqué Buno.

Tu "ouvres" la méthode Write sans avoir "fermé" readCSV.
Tu n'appelles cette méthode nulle part, là ou te l'avis proposé Buno ça parait bien.

Sinon ton code est assez long, ce serait pratique d'indiquer ou ça plante.


Whismeril
0
Whismeril Messages postés 18018 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 4 décembre 2022 618
12 oct. 2011 à 20:49
Et tu n'as pas non plus utilisé switch:

Swicth(temp[0])
{
case "Cercle":
....
....
break;

case "Rectangle":
....
....
break;

}

Whismeril
0
Whismeril Messages postés 18018 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 4 décembre 2022 618
14 oct. 2011 à 23:17
Bonsoir,

@Buno, quel est l'intérêt de CompareTo() par rapport à ==?


Whismeril
0
BunoCS Messages postés 15330 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 novembre 2022 103
11 oct. 2011 à 08:57
Hello,
C'est intéressant ton histoire, mais ne mélanges pas les torchons et les serviettes: Basic vs. C# (je renomme ton sujet pour le coup), cvs vs. csv,...
Pour répondre à ta question, oui, on peut t'aider, mais:
- on ne te donnera pas de code tout fait, on corrige
- l'énoncé, c'est bien, mais le code, c'est mieux
- expliques nous précisément où tu bloques.

Dans ton cas, il te faut:
- lire le fichier CSV de départ: StreamReader, ok
- stocker ce que tu viens de lire dans une structure de données correspondant à tes besoins
- écrire le fichier destination, ce qui revient à "traduire" ta structure de données en en fichier SVG

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
-1