begin process at 2008 08 08 21:47:09
1 223 607 membres
365 nouveaux aujourd'hui
14 230 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

CSVSHARP. DLL D'IMPORT/EXPORT DE CONTENU AU FORMAT CSV


Information sur la source

Catégorie :API Source .NET ( DotNet ) Classé sous : CSVSharp, csv, import, export Niveau : Initié Date de création : 19/01/2008 Date de mise à jour : 21/01/2008 16:28:30 Vu / téléchargé: 3 497 / 160

Note :
Aucune note

Commentaire sur cette source (4)
Ajouter un commentaire et/ou une note

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 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();
  • }
// 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 :-)
Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

20 janvier 2008 17:21:03 :
Champs "Source" complété...
  • signaler à un administrateur
    Commentaire de Bidou le 20/01/2008 17:56:26 administrateur CS

    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.

  • signaler à un administrateur
    Commentaire de heriquet le 20/01/2008 18:07:14

    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 ?

  • signaler à un administrateur
    Commentaire de Bidou le 20/01/2008 18:23:54 administrateur CS

    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...)

  • signaler à un administrateur
    Commentaire de bir le 29/06/2008 00:19:09

    ce code est tres interessant je vais tester

Ajouter un commentaire

Pub



Appels d'offres

CalendriCode

Août 2008
LMMJVSD
    123
45678910
11121314151617
18192021222324
25262728293031

VS Express FR Gratuit !

VS Express en français et 100% gratuit !

Boutique

Boutique de goodies CodeS-SourceS