IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Fichier plat à découper : Quelle techno utiliser ? DataGrid ? DataTable ? List<T>


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    281
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 281
    Par défaut Fichier plat à découper : Quelle techno utiliser ? DataGrid ? DataTable ? List<T>
    Bonjour à tous


    Je fais face à une interrogation sur un choix à faire en .Net / C#.

    Je souhaite faire un programme permettant de lire un fichier "plat" contenant des données.
    Concrètement, ce fichier serait un fichier ASCII/Texte qui contiendrait des données séparées par un séparateur, disons une tabulation pour le moment.

    Mon but serait de charger ce fichier en mémoire et d'avoir un accès "facile" à mes données découpées.
    Mon but serait de pouvoir faire des agrégations sur ce fichier.

    Exemple tout simple, imaginons un fichier plat qui contient des écritures comptables ( en gros, une colonne "Numero de compte", une autre "debit", une autre "credit").

    Je souhaiterais pas exemple que toutes les lignes avec le même compte soit fussionnées en une seule ligne, avec le débit de sommé. Et une autre ligne avec le crédit sommé. Ce qu'on appelle donc une "agrégation".

    N'ayant pas non plus une grosse expérience en .Net, ( même si j'ai quelques applis à mon actif), je me demande quoi utiliser pour stocker mon fichier découpé, et surtout pour pouvoir faire des manipulation façile ( ma fameuse agrégation).

    -Charger le fichier dans un DataGrid ?
    -Charger le fichier dans un DataTable ?
    -Charger le fichier dans un flux mémoire XML ? ( même si c'est un fichier plat ?)
    -Charger le fichier dans une liste <T> ?

    A noter quelques contraintes ( oui, sinon c'est pas drôle ).

    Mon programme devrait être paramétrable, c'est à dire, que devrais pouvoir lui donner un fichier avec des colonnes supplémentaires ( donc je ne peux "pas" faire un code "statique", il doit être dynamique).

    En plus de cela, je pourrais être amené , à, en plus de traiter des fichiers avec des séparateurs, des fichiers XML, mais, aussi....des fichiers TEXTES avec longueurs fixes...

    Dans le cas de la longueur fixe, forcément il faudra que je spécifie mon mappage, nous sommes d'accord.

    Dans ce cas...et afin de faire de la manipulation facilement...Dans quoi chargeriez vous mon fichier ?

    -Charger le fichier dans un DataGrid ?
    -Charger le fichier dans un DataTable ?
    -Charger le fichier dans un flux mémoire XML ? ( même si c'est un fichier plat ?)
    -Charger le fichier dans une liste <T> ?

    Merci à tous ceux qui ont pris le temps de lire mon message
    N'hésitez pas si il y a des questions

    Merci à tous

    Nix

  2. #2
    Membre émérite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2010
    Messages
    479
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 479
    Par défaut
    Tu devrais utiliser Excel tu t'épargneras beaucoup de travail

    Pour faire du générique tu vas vraiment te casser la tête...
    La piste de la datatable n'est pas mauvaise en créant des Providers qui te permettront d'absorber différents types de fichiers (csv avec le séparateur en variable par exemple)
    En premier lieu fais une datatable qu'avec de colonnes string. Tu l'affiches; tu demandes à l'utilisateur de typer chaque colonne (string, Datetime, float, int etc..) et après en fonction du type tu peux imaginer des fonctions sommes, moyenne etc...
    Après pour le somme avec le groupby sur une colonne (nom de compte) avec du générique c'est pas super simple mais ça se fait; peut-être le lien suivant
    http://www.codeproject.com/Questions...-with-group-by

    Après franchement le mieux si tu connais ta structure tu fais une classe Entree { numCompte, Date, Debit } et là tu peux faire ce que tu veux facilement avec une List<Entree> sans trop en demander à l'utilisateur. Sinon tu as la première méthode mais ça ressemble à Excel

  3. #3
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    281
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 281
    Par défaut
    Hello,

    Je ne peux pas utiliser Excel car le but serait au final d'avoir un programme console dans lequel je lui passerait en argument un fichier de "paramétrage". Ce fichier contiendrait le chemin de mon fichier en entrée, et celui de sortie, le type de fichier, le séparateur et sur quoi sommer.

    Le but est que ce programme soit lancé via une automatisation. C'est pas du manuel, pas du one shot, donc je ne peux pas prendre Excel.

    Oui, une liste<T> serait bien...si mon, fichier était toujours le même, sauf que je risque d'avoir entre 7 et 10 fichiers...différents.

    Si j'arrive déja a tout parser dans un DataTable ce serait déja un bon boulot je pense. Ensuite, on peut utiliser Linq sur un DataTable ? Ou c'est mieux directement de charger mon fichier ( même texte) dans un XML en mémoire...ça revient peux être au même au fond.

    Encore merci

  4. #4
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Par défaut
    bah, tu pourrais avoir un fichier qui décrit tes colonnes, avec type et action autorisée (somme, par exemple)

    et ensuite, dans ton programme, tu charges en mémoire tes données dans un tableau et tu pourras ensuite faire les sommes, ou autre en fonction
    des actions autorisés par ton fichier de description...

  5. #5
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    281
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 281
    Par défaut
    Tout à fait, c'est le but en gros, avoir un fichier contenant des paramètres, et mon programme lit ces paramètres et fait ce qu'il a à faire.

    Tu dis : Stocker dans un tableau.
    Alors, justement, ce serait pas un peu trop "oldschool" d'utiliser un tableau ? Car il va falloir manipuler les indexs, ne serait il pas plus simple de bosser sur un DataTable ou sinon je pensais à une chose peux être plus "smart" : Une list<T> d'un objet objet généré via un ORM de type Entity framework.

    Je n'ai jamais utilisé Entity Framework, mais c'est bien à cela que ca sert ? En gros, ça permet de créer dynamiquement un objet ?
    Qu'en penses tu?

  6. #6
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    Si tu veux utiliser les listes le plus simple est de faire une liste (ligne) de liste (colonne) d'objet (la donnée)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List<List<object>> data= new List<List<object>>();
    Mais le DataTable semble plus adapté.
    - Tu peux créer des colonnes de type objet, les remplir et tenter de définir le type après (un clone + typage en faite)
    - Ou garder le type objet et jouer sur les cast lors de tes requêtes.
    - Tenter le type var si il est permit.

Discussions similaires

  1. Quelle techno utiliser ?
    Par juujuu50 dans le forum Protocoles
    Réponses: 4
    Dernier message: 12/05/2014, 09h22
  2. Web mobile quelles technos utiliser ?
    Par bedomon dans le forum Général Conception Web
    Réponses: 0
    Dernier message: 02/10/2013, 15h48
  3. Quelles technos utiliser pour un site web
    Par algabow dans le forum Plateformes (Java EE, Jakarta EE, Spring) et Serveurs
    Réponses: 4
    Dernier message: 24/12/2011, 01h40
  4. Quelle techno utiliser pour faire une appli de gestion
    Par zaz147 dans le forum Général Java
    Réponses: 5
    Dernier message: 09/12/2010, 17h14
  5. Quelle techno utiliser pour mon site ?
    Par Horse_pyro dans le forum Général Conception Web
    Réponses: 8
    Dernier message: 27/03/2007, 16h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo