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

Soyez le premier à donner votre avis sur cette source.

Vue 10 220 fois - Téléchargée 763 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_Bidou
Messages postés
5507
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
38 -
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.
heriquet
Messages postés
13
Date d'inscription
dimanche 27 juillet 2003
Statut
Membre
Dernière intervention
20 janvier 2008
-
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
5507
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
38 -
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...)
cs_bir
Messages postés
9
Date d'inscription
lundi 23 juin 2003
Statut
Membre
Dernière intervention
15 mars 2009
-
ce code est tres interessant je vais tester

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.