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 :

Tri de fichier .csv


Sujet :

C#

  1. #1
    Membre à l'essai
    Homme Profil pro
    Informatique
    Inscrit en
    Janvier 2012
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2012
    Messages : 20
    Points : 16
    Points
    16
    Par défaut Tri de fichier .csv
    Nom : trifile.png
Affichages : 492
Taille : 14,7 KoNom : trifile.png
Affichages : 492
Taille : 14,7 Ko

    Bonjour,

    j'ai une question ou des question a vous poser

    On m'a demandé de faire une application C# sur Visuel studio (Win Form) qui permet de lire un fichier de contrats .csv (séparation par des points-virgule) et trier les contrats de façon hiérarchique selon le besoin suivant:

    1) NUMC
    2) NUMRANG
    3) DEBGARNTIE
    4) FINGARNTIE

    En exemple en pièce jointe un fichier te montrant comment ce niveau hiérarchique doit être prévu

    J'ai encadré en rouge ce qu'implique ce niveau de trie:

    on a:
    - C1 1er contrat
    - 1 1er rang dans le contrat C1
    - 20100101 plus ancienne date de début garantie pour le rang 1 du contrat C1
    - 20120101 plus ancienne date de fin garantie parmi les garanties au 20100101 pour le rang 1 du contrat C1

    on a donc comme 1ère ligne du fichier de contrat C1, 1, 20100101, 20120101 en respectant ce tri.

    J'ai commencé a réfléchir à la solution, j'ai pensé faire comme ça:

    comme on a la position des chaque champs dans une un autre fichier, j'ai pris les colonnes qui m’intéressent et les stockées dans un fichier .csv. ce fichier de propriété comme je l'ai nommé, je l'ai mis a l’intérieure de mon application dans Ressources.resx*
    Je lis d'abord le fichier des propriété et les stockent dans une liste. comme ça j'ai toutes les colonnes
    Ah j'ai oublié de vous dire que le fichier des contrat n'a pas de nom de colonne, y a que les données c'est pour cela j'ai pensé à utiliser un autre fichier pour stocker la position de chacune des colonnes.

    puis je lis le fichier des contrat et je fais mon trie puis faire les trie selon les critère qu'on m'a donné.
    le problème je n'ai pas beaucoup de connaissance en programmation et je n'arrive pas a commencer!!

    Mes questions sont les suivantes :
    est ce que je crée une classe ou je mets les noms de mes propriétés ou juste une liste?
    comment faire le lien entre le fichier des propriétés et le colonnes de mes données (fichier des contrats)?

    Je vous remercie pour votre aide.

    Bien a vous

  2. #2
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Pour construire une DataTable avec le fichier csv:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
            string[] Lines = File.ReadAllLines(CSVFilePathName);
            DataTable dt = new DataTable();
            int FirstDataLine= 0 ; // 1 si la 1ère ligne contient les noms de champs, 0 sinon
            string[] Fields ;
            if (FirstDataLine==0) { Fields = Lines[0].Split(new char[] { ',' }); }
            else ... ; // définir ici la liste des noms de champs
            int ColsCount = Fields.Length;
            for (int i =0; i < ColsCount; i++)  dt.Columns.Add(Fields[i].ToLower(), typeof(string));
            for (int i = FirstDataLine; i <Lines.Count; i++)
            {
                Fields = Lines[i].Split(new char[] { ',' });
                DataRow Row = dt.NewRow();
                for (int j = 0; j < ColsCount; j++)  Row[j] = Fields[j];
                dt.Rows.Add(Row);
            }
    Pour trier la DataTable:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    dt.DefaultView.Sort = "NUMC ASC, NUMRANG ASC, DEBGARNTIE ASC , FINGARNTIE ASC";
    dt = dt.DefaultView.ToTable();
    Pour afficher la DataTable, utiliser un DataGridView bindé avec la DataTable:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mygridview.datasource=dt ;
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  3. #3
    Membre à l'essai
    Homme Profil pro
    Informatique
    Inscrit en
    Janvier 2012
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2012
    Messages : 20
    Points : 16
    Points
    16
    Par défaut
    Bonjour Graffito,

    Je te remercie pour cette réponse,
    tu l'as sans doute remarqué que je suis débutant dans la prog

    j'ai comme même des points obscures qui sont les suivants:

    Comme je l'ai expliqué, le fichier de données que je souhaite lire et trier, n'a pas de nom de colonnes (il y a que les données séparées par des ";").
    mon idée c'était de mettre dans Ressources, un fichier propriétés qui contient les noms des colonnes, leurs longueurs, et leurs positions. (fichier .csv ";")
    je ne sais pas s'il faut modifier quelque chose dans le Build Action de Visuel Studio?!!
    puis écrire un code qui lit d'abord le fichier de propriétés depuis les Ressources, après il lit le fichier de données et fait la lien entre les données et le nom de colonne.

    puis faire le trie à la fin?

    est ce que ça te semble compliquer comme réflexion? est ce que ta méthode m'évite de me compliquer la vie?

    Comment faire?

    Je te remercie par avance.

    Slim025


    Citation Envoyé par Graffito Voir le message
    Pour construire une DataTable avec le fichier csv:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
            string[] Lines = File.ReadAllLines(CSVFilePathName);
            DataTable dt = new DataTable();
            int FirstDataLine= 0 ; // 1 si la 1ère ligne contient les noms de champs, 0 sinon
            string[] Fields ;
            if (FirstDataLine==0) { Fields = Lines[0].Split(new char[] { ',' }); }
            else ... ; // définir ici la liste des noms de champs
            int ColsCount = Fields.Length;
            for (int i =0; i < ColsCount; i++)  dt.Columns.Add(Fields[i].ToLower(), typeof(string));
            for (int i = FirstDataLine; i <Lines.Count; i++)
            {
                Fields = Lines[i].Split(new char[] { ',' });
                DataRow Row = dt.NewRow();
                for (int j = 0; j < ColsCount; j++)  Row[j] = Fields[j];
                dt.Rows.Add(Row);
            }
    Pour trier la DataTable:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    dt.DefaultView.Sort = "NUMC ASC, NUMRANG ASC, DEBGARNTIE ASC , FINGARNTIE ASC";
    dt = dt.DefaultView.ToTable();
    Pour afficher la DataTable, utiliser un DataGridView bindé avec la DataTable:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mygridview.datasource=dt ;

  4. #4
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    mon idée c'était de mettre dans Ressources, un fichier propriétés qui contient les noms des colonnes, leurs longueurs, et leurs positions.
    Si le fichier indiquant nom et position de colonnes peut varier, le mettre dans les ressouces ne permettra pas de prendre en compte cette variation.
    Si le fichier est fixe, tu te compliques la vie. Il suffit de remplacer les ... du code indiqué par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Fields = new string[] { "NUMC","NUMRANG","DEBGARNTIE","FINGARNTIE" };
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

Discussions similaires

  1. Tri dans fichier csv
    Par pingouinos_64 dans le forum Général Python
    Réponses: 7
    Dernier message: 24/09/2013, 09h17
  2. Réponses: 2
    Dernier message: 16/11/2011, 09h21
  3. tri sur fichier CSV
    Par Mouadlib dans le forum Langage
    Réponses: 2
    Dernier message: 17/12/2009, 09h33
  4. Réponses: 5
    Dernier message: 22/04/2008, 13h53

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