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 :

Découper un fichier CSV en plusieurs selon les valeurs de deux colonnes


Sujet :

C#

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2016
    Messages : 132
    Points : 59
    Points
    59
    Par défaut Découper un fichier CSV en plusieurs selon les valeurs de deux colonnes
    Bonjour,

    Je veux découper un fichier CSV en plusieurs Fichiers CSV si la valeur de la colonne 2 et la colonne 4 sont différentes des autres valeurs dans les autres lignes.

    C'est à dire si deux lignes dont leurs valeurs de la colonne 2 et 4 égaux le fichier csv obtenu aura les deux lignes. si toutes les valeurs sont différentes de la colonne 2 et 4 ligne par ligne alors les fichiers CSV générés comporteront chacun une seule ligne.

    J'ai réussi à découper les fichiers CSV en plusieurs fichier dans le cas simple ou dans toutes les lignes les valeurs de la colonne 2 consécutivement et 4 sont différentes. Mais, je n'arrive pas à faire le traitement dans le cas ou les colonnes 2 et 4 ont la même valeur.
    Je m'explique : si j'ai un fichier CSV :
    1;2;3;4
    3;2;1;4
    1;5;5;4
    j'aurais après le traitement deux fichiers CSV :
    le premier: 1;2;3;4
    1;5;5;4
    le second: 3,2;1;4
    Mon code est le suivant pour découper les fichiers 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
    16
    17
    18
     
       void decouperFichierCSv()
                {
                    int i = 0;
                    using (StreamReader sr = new StreamReader("File.csv"))
                    {
                        string ligne = "";
     
                        while ((ligne = sr.ReadLine()) != null)
                        {
                            // le code du foreach de lead
                            i++;
                            StreamWriter monStreamWriter = new StreamWriter("fichier "+i+".csv");
                            monStreamWriter.WriteLine(ligne);
                            monStreamWriter.Close();
                        }
                    }
                }
    Pourriez-vous m'aider?

    Merci beaucoup!

  2. #2
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2004
    Messages
    304
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 304
    Points : 405
    Points
    405
    Par défaut
    Commence par regarder la fonction Split
    https://www.dotnetperls.com/split
    Tu découpe ta ligne en plusieurs colonnes puis tu fait tes tests.
    Essaye de faire un bout de code et on continuera à t'aider.
    S'il n'y a pas de Solution, c'est qu'il n'y a pas de Problème.
    ----------------------------------------------------------------------------------------
    Pour se protéger, un bon préservatif pour votre PC : AntiVir et SpyBot - Search & Destroy

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2016
    Messages : 132
    Points : 59
    Points
    59
    Par défaut
    Bonjour,

    Merci pour la réponse.

    Je comprends pas pourquoi découper la ligne en plusieurs colonnes . en fait, je travaille sur un fichier CSV.

    Il y a pas une fonction plus simple qui permet de tester si le contenu d'une telle colonne est le même d'une autre comme ça je teste ça et je récupère le numéro de la ligne où on vérifie cette condition et on la copie dans un fichier CSV?

    Merci!

  4. #4
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2005
    Messages
    562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2005
    Messages : 562
    Points : 1 511
    Points
    1 511
    Par défaut
    Citation Envoyé par samuel44 Voir le message
    Il y a pas une fonction plus simple qui permet de tester si le contenu d'une telle colonne est le même d'une autre comme ça je teste ça et je récupère le numéro de la ligne où on vérifie cette condition et on la copie dans un fichier CSV?
    Bonjour,

    Une fonction plus simple que Split(..) ?
    En faite la fonction que tu demandes c'est à toi de la faire, oui le développement demande du travail, tu as énoncé l'algo (l'extrait ci-dessus), @zehle t'as donné la piste vers la solution technique, tu as tout ce qu'il faut pour travailler et revenir vers nous si tu rencontre d'autres problèmes.



    J@ck.
    Pas de réponse par MP, merci.

    Penser au ça fait plaisir

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 8
    Points : 22
    Points
    22
    Par défaut
    Bonjour samuel44,

    Je confirme que Zehle et J@ckHerror sont dans le vrai.
    Il est difficile de donner plus d'information en réponse à votre question sauf pour vous écrire les lignes code. La méthode Split() énoncée est le seul outil dont vous auriez besoin.

    Je me permet tout de même de vous présenter un exemple d'utilisation de Split() en relation avec votre cas (à tester tout de même, je l'ai écris à la volée) :


    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
    16
    17
    18
    List<string> filename = new List<string();
    while ((ligne = sr.ReadLine()) != null)
    {
                    string[] Columns = ligne.Split(';');
                    // Récupérer la 1ere et la 4eme colonne
                    string sDum = string.Format($"{Columns[0]}et{Columns[3]}");
                    if (filename.Contains(sDum))
                        i = (filename.IndexOf(sDum) + 1);
                    else
                    {
                        filename.Add(sDum);
                        i = filename.Count;
                    }
     
                    StreamWriter monStreamWriter = new StreamWriter("fichier " + i + ".csv", true);
                    monStreamWriter.WriteLine(ligne);
                    monStreamWriter.Close();
    }
    En complément du lien déjà proposé Zehle, je vous conseillerai bien aussi de visiter celui-ci afin de perfectionner votre approche d'écriture de fichier :
    https://stackoverflow.com/questions/...a-streamwriter

    Ma dernière remarque ne sera peut-être pas d'une réelle utilité, mais il me semble que votre énoncé ne corresponde pas tout à fait avec votre exemple. Suis-je dans l'erreur ?

    Dans tous les cas, j'espère avoir apporter une pierre à votre édifice.

    Bonne journée et continuer à persévérer, c'est en codant que l'on apprend à coder ;-)

  6. #6
    Membre chevronné
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 899
    Points : 1 916
    Points
    1 916
    Par défaut
    Si je comprends la présentation de ton problème tu veux regrouper les lignes de ton csv en fonction des valeurs des lignes 2 et 4. Pourtant ton exemple semble contradictoire. Avec les lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    1;2;3;4
    3;2;1;4
    1;5;5;4
    on devrait obtenir un csv avec :
    et un autre avec :
    Et que se passe-t-il si tu as un fichier comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    1;2;3;4
    3;2;1;4
    1;5;5;4
    5;2;1;4
    Est-ce-que 5;2;1;4 est regroupée avec les deux premières lignes, ou est-ce-que la transition par la troisième ligne provoque une rupture et on a 3 csv ?

Discussions similaires

  1. [Batch] Découper un fichier CSV en plusieurs fichiers CSV de 3000 lignes
    Par skyser dans le forum Scripts/Batch
    Réponses: 3
    Dernier message: 17/06/2016, 17h12
  2. Découper un fichier csv en plusieurs
    Par Rorylh dans le forum Développement de jobs
    Réponses: 4
    Dernier message: 13/02/2013, 16h28
  3. Réponses: 10
    Dernier message: 25/07/2012, 11h46
  4. [AC-2007] Comptage dans une zone de liste selon les valeurs d'une colonne
    Par lakhdar16 dans le forum VBA Access
    Réponses: 4
    Dernier message: 18/07/2012, 11h11
  5. Réponses: 4
    Dernier message: 21/07/2011, 15h25

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