Csvsharp. dll d'import/export de contenu au format csv

Soyez le premier à donner votre avis sur cette source.

Vue 11 088 fois - Téléchargée 903 fois

Description

CSVSharp est un composant que j'ai développé l'an passé mais qui a dormi pendant un an, le temps que je remette de l'ordre et me décide à le publier !

Le but est comme son nom le sous-entend de fournir les services nécessaires à la lecture et l'écriture de fichiers CSV de la même façon que les flux traditionnaux, c'est à dire au travers de 2 classes CSVReader et CSVWriter.

Tout est écrit en C# mais le code compilé est bien sur compatible avec les autres langages .NET.

Source / Exemple :


// Exemple d'utilisation (fourni dans le zip) :

try
{
    CSVSharp.CSVSharp.Separators separator = CSVSharp.CSVSharp.Separators.Semicolumn;

    CSVWriter writer = new CSVWriter("export.csv", separator);
    writer.HeaderToCapitalLetters = true;
    // Insert a character like the separator you chosen to test that property
    writer.CheckTableContentSeparatorConflicts = true; 

    #region DataTable Setting

    DataTable dt = new DataTable("CSV");

    dt.Columns.Add("MembreID", Type.GetType("System.Int32"));
    dt.Columns.Add("Nom", Type.GetType("System.String"));

    DataRow dr = dt.NewRow();
    dr[0] = 1;
    dr[1] = "Eric";
    dt.Rows.Add(dr);

    dr = dt.NewRow();
    dr[0] = 2;
    dr[1] = "Marion";
    dt.Rows.Add(dr);

    dr = dt.NewRow();
    dr[0] = 3;
    dr[1] = "Amélie";
    dt.Rows.Add(dr);

    Console.WriteLine("Export running...");

    #endregion

    writer.CreateCSVFromDataTable(dt, true);
    
    CSVReader reader = new CSVReader("export.csv", separator, true);

    dt = reader.CreateDataTableFromCSV();

    #region Display of the content

    Console.Write("\nHEADER: ");

    if (reader.FirstRowIsHeader)
        Console.WriteLine("There are headers.\n");
    else
        Console.WriteLine("There are no headers.\n");

    Console.WriteLine("Dataset columns list:\n");
    foreach (DataColumn d in dt.Columns)
    {
        Console.WriteLine("\t" + d.ColumnName);
    }

    Console.WriteLine("\nDataset columns list:\n");
    foreach (DataRow d in dt.Rows)
    {
        Console.WriteLine("\t{0} - {1}", d[0], d[1]);
    }

    Console.WriteLine("\nImport done!");

    #endregion 
}
catch (CSVDataTableConflictsException ex)
{
    Console.WriteLine(ex.Message);
}
catch (Exception ex)
{
    Console.WriteLine(ex.Message + "\n" + ex.StackTrace);
}
finally
{
    Console.ReadKey();
}

Conclusion :


Je serais intéressé par des feed-backs en tous genres. Critiques, améliorations, erreurs trouvées...

De même si vous l'utilisez, cela me ferait plaisir de le savoir car dans ce cas la publication n'aurait pas servi à rien :-)

Codes Sources

A voir également

Ajouter un commentaire Commentaires
cs_bir Messages postés 9 Date d'inscription lundi 23 juin 2003 Statut Membre Dernière intervention 15 mars 2009
29 juin 2008 à 00:19
ce code est tres interessant je vais tester
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 60
20 janv. 2008 à 18:23
SaveFileDialog est sealed (comme indiqué dans tes commentaires), on ne peut donc pas la customiser. CSVSaveFileDialog se contente juste de setter quelques properties par défaut sur ce Dialog, ce qui semble ne pas avoir vraiment de sens (pourquoi ne pas directement utiliser les properties et méthodes de SaveFileDialog ??). En gros, tu as fait un wrapper inutile :)

GetSeparator retourne le Seperator courant (issu de l'enum). Pourquoi ne pas appelé simplement ToString sur l'enum par exemple? La méthode me paraît pas spécialement indispensable...

Une classe abstract sans méthode abstract a t'elle vraiment un sens? Je n'en suis pas vraiment persuadé... Si c'est juste pour mettre une méthode ou une ou deux properties en commun, alors tu ferais mieux de les dupliqué dans chacune des classes (voire faire une classes commune, non abstraite, mais là encore, niveau conception, je ne pense pas que ça soit l'idéal...)
heriquet Messages postés 13 Date d'inscription dimanche 27 juillet 2003 Statut Membre Dernière intervention 20 janvier 2008
20 janv. 2008 à 18:07
Tout d'abord merci pour le commentaire... c'est toujours instructif d'avoir un retour !

CSVSaveFileDialog permet d'avoir un SaveFileDialog customisé... on peut choisir l'extension de fichiers... et ce en rapport avec l'utilisation de fichiers csv. Un peu gadget mais je l'utilise bel et bien...

GetSeparator permet en interne de retrouver le caractère du séparateur spécifié... elle est utilisée par les classes CSVReader et CSVWriter d'ou un héritage de la classe CSVSharp et on ne peut pas l'implémenter donc je l'ai mise abstract. Si ce n'est pas juste, qu'aurais-tu mis ?
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 60
20 janv. 2008 à 17:56
J'ai pas testé le code, mais juste regardé le contenu des fichiers via le site...

- La classe CSVSaveFileDialog n'est vraiment pas utile! Du moins, je ne vois pas son utilité...
- Je suis sceptique concernant la classes CSVSharp. Est-elle vraiment utile, pourquoi abstract? Visiblement non, ou en tout cas tu n'utilises pas les concepts donnés par une telle classes abstraite.
- La méthode GetSeparator est-elle vraiment utile??

Voilà voilà pour une première lecture.

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.