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 :

CSV - colonnes dans le désordre


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2009
    Messages : 95
    Par défaut CSV - colonnes dans le désordre
    Bonjour,

    Je recherche une solution élégante au sujet d'un fichier CSV.

    La première ligne contient les noms des colonnes (parfois plus de 20).
    Ex.: nom;prenom,adresse.

    Mon problème est que je reçois ce fichier avec parfois un ordre différent
    Ex.:adresse;prenom,nom.

    Pas moyen de forcer l'ordre dans le fichier d'origine, j'y ai pensé, ça vient de plus haut.

    Une autre difficulté est que le code doit pouvoir être réutilisé pour plusieurs fichiers différents qui ont le même problème (et des noms de colonne différents).

    Pour l'instant, j'ai lu la première ligne avec les titres et j'ai fait un split dans un simple tableau de String[].

    Comment puis-je m'en sortir?

    Merci de votre aide.

  2. #2
    Membre émérite

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2011
    Messages
    487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

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

    Informations forums :
    Inscription : Juin 2011
    Messages : 487
    Par défaut
    Bonjour,

    J'avoue ne pas avoir tout compris. Est ce que tu as un fichier en lecture dont tu ne connais pas l'ordre des colonnes ? Ou est ce que c'est un fichier que tu n'arrives pas à écrire dans l'ordre ?
    Mon blog sur les technos .NET et Agile -> http://blog.developpez.com/maximepalmisano/

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2009
    Messages : 95
    Par défaut
    Merci pour l'intérêt.

    Je reçois un fichier en lecture dont je ne connais pas l'ordre des colonnes. Je sais qu'elles sont les colonnes.

    Avec ce fichier, je dois en refaire un autre qui soit dans le bon ordre.

    Je reçois : localité, boite, prénom, nom, adresse, code, etc
    Je dois en faire : nom, prenom, adresse, code, localité,...

    Et cela pour plusieurs fichiers.

  4. #4
    Membre émérite

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2011
    Messages
    487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

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

    Informations forums :
    Inscription : Juin 2011
    Messages : 487
    Par défaut
    J'ai une solution mais je ne sais pas si c'est la plus optimisée.

    Dans un premier temps, il s'agit de lire le header et de détecter dans quel ordre les colonnes se trouvent :

    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
    19
    20
    21
     
    // Détection des index des colonnes
    string[] headers = monHeader.Split(CSV_SEPARATOR);
     
    // NAME_HEADER est une constante qui vaut "Nom" par exemple
    // Le jour où le nom de la colonne change, pas besoin d'aller chercher dans tout le code, il y a une seule variable à changer
    int nameIndex = GetIndexInArray(NAME_HEADER, headers);
    int addressIndex = GetIndexInArray(ADDRESS_HEADER, headers);
    // Etc...
     
    // Une fois que l'on connait les index
    foreach(string line in myFileContent)
    {
        string[] values = line.Split(CSV_SEPARATOR);
     
        ClassPerso cp = new ClassPerso();
        cp.Name = values[nameIndex];
        cp.Address= values[addressIndex];
     
        cpList.Add(cp);
    }
    Avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    private string GetIndexInArray(string value, string[] array)
    {
        for(int i = 0; i < array.Length; i++)
        {
            if(array[i] == value)
                return i;
        }
    }
    Mon blog sur les technos .NET et Agile -> http://blog.developpez.com/maximepalmisano/

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2009
    Messages : 95
    Par défaut
    Ah ouais.

    Ca me semble élégant en effet.

    Je teste ça de suite.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2009
    Messages : 95
    Par défaut
    Ca roule.

    Merci beaucoup.

    Je passe en résolu.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Fichiers Excel avec des colonnes dans le désordre avec TOS - hashmap
    Par jmsicot dans le forum Développement de jobs
    Réponses: 0
    Dernier message: 28/01/2015, 11h15
  2. copier coller des colonnes dans le désordre
    Par sash6 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 02/05/2008, 18h24
  3. Réponses: 32
    Dernier message: 11/03/2007, 11h25
  4. Réponses: 4
    Dernier message: 13/12/2006, 17h10
  5. [débutant] nombre de colonne dan sun fichier csv
    Par mandagor dans le forum C++
    Réponses: 18
    Dernier message: 15/06/2005, 15h42

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