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 :

Question Regex sur des données CSV avec ;


Sujet :

C#

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 48
    Points : 38
    Points
    38
    Par défaut Question Regex sur des données CSV avec ;
    Bonjour,

    Je cherche à extraire les champs d'une ligne csv.
    Dans le cas normal il suffit de faire un split(';'), mais une des données dans mon cas peut-être ";"
    Exemple :
    DEBUT;A;";";"B;C";DE;F;FIN
    Champ n°1 : DEBUT
    Champ n°2 : A
    Champ n°3 : ;
    Champ n°4 : B;C
    Champ n°5 : DE
    Champ n°6 : F
    Champ n°7 : FIN

    J'ai voulu commencé par extraire les données qui ne contiennent pas de ;
    J'ai testé l'expression suivante : (;[^"][a-zA-Z0-9]+[^"]) un ; puis je ne doit pas avoir de guillemet puis un texte alpha numérique qui ne se termine pas par un guillemet
    Le j'ai le résultat suivant : ;DE; et ;FIN
    Par contre si je teste l'expression suivante (je fixe le nombre d'occurence du ") : (;"{0}[a-zA-Z0-9]+"{0}) j'ai eu un resultat plus proche : ;A / ;C / ;DE / ;F / ;FIN
    Pour quoi il a récupéré le C puisque qu'il a un guillemet après et n'a pas récupéré le B qui possède un guillemet juste avant malgré que la condition est la même pour le début et la fin de la chaine demandée?

    Pour la partie avec ; j'ai trouvé plus de difficulté à mettre en oeuvre.

    Si vous avez des suggestions je suis preneur.


    Merci d'avance

  2. #2
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Avant tout, il existe des librairies pour les fichiers csv.

    Sinon en version regex, il ne faut pas chercher à "splitter" la chaîne, mais à récupérer les parties qui t'intéressent qu'on peut décrire de cette manière:

    Tout ensemble de zéro à plusieurs caractères ne contenant pas de point-virgule ni de quote (") (ni de saut de lignes si plusieurs lignes sont traitées)

    ou

    une chaîne entre quotes ne pouvant pas contenir de quotes sauf s'ils sont échappés ( généralement dans un csv ils sont doublés "" ).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    string pattern = @"[^;""\r\n]*|""[^""]*(?>""""[^""]*)*""";
     
    foreach (Match m in Regex.Matches(input, pattern)) 
               Console.WriteLine(m.Value);
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

Discussions similaires

  1. Réponses: 1
    Dernier message: 08/08/2012, 14h52
  2. Récupérer des données CSV avec Excel
    Par mmmxtina dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 26/06/2009, 14h54
  3. Requete sur des données horaires avec des trous..
    Par edmc73 dans le forum PostgreSQL
    Réponses: 9
    Dernier message: 11/09/2007, 21h02
  4. Travailler sur des sources distantes avec Eclipse
    Par El Saigneur dans le forum Eclipse Java
    Réponses: 5
    Dernier message: 12/07/2004, 09h40
  5. Travailler sur des données qui doivent être triées
    Par haypo dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 19/07/2003, 17h13

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