none
Intégration d'un CSV : problème de séparateur RRS feed

  • Question

  • Bonjour,

    Tout d'abord, je n'ai pas vu de section SSIS donc je suppose qu'ici, ça ira. Si je me suis trompé, veuillez m'excuser.

    Je suis sous SSIS 2005 et je rencontre un problème avec un fichier CSV que je dois parcourir.

    Le séparateur est le ;

    Tous les champs sont encadrés de guillemets.

    Le connecteur (flat file connection) est défini comme suit :

    - Code page : 65001 (UTF-8)

    - Format : Delimited

    - Text qualifier : "

    - Header row delimiter : Semicolon {;}

    - Header rows to skip : 0

    - "Column names in the first data row" is checked

    Il me reconnait parfaitement toutes les colonnes qui sont par la suite configurées comme je souhaite.

    Le problème que je rencontre est dans une colonne de commentaire qui contient un point-virgule et qu'il considère comme un séparateur alors que le champ entier est entouré de guillemets.

    Par ailleurs, dans ce champ, il-y-a un mot entouré de guillemets qui sont, pour l'occasion, doublés et cela ne semble pas lui poser de problème car lorsque je fais un preview, ledit mot ainsi que le texte suivant rentre bien dans la colonne de commentaire.

    Exemple:

    "tata titi toto tata ""toto"" titi tata ; titi toto tutu";"tutu"

    Ici, il devrait reconnaitre deux colonnes :

    - la colonne "commentaire" qui devrait contenir tata titi toto tata ""toto"" titi tata ; titi toto tutu

    - la colonne "lieu" qui devrait contenir tutu

    Malheureusement, le preview m'affiche ceci :

    - la colonne "commentaire" contient tata titi toto tata ""toto"" titi tat

    - la colonne "lieu" contient titi toto tutu. Or, sans parler de l'intégrité des données que je veux insérer en bdd qui est altérée, j'ai un overflow car le texte qu'il intègre dans la colonne "lieu" est plus long que la vraie donnée d'origine et donc, j'ai une erreur.

    Ai-je raté une étape de configuration ?

    Sachant que je vais avoir du mal à faire changer le format du fichier d'entrée comme leur demander de supprimer les ; dans les champs de commentaire.

    Merci


    • Modifié nGibou vendredi 9 septembre 2011 14:50
    • Déplacé Gilles TOURREAU samedi 10 septembre 2011 20:44 (Origine :Développement .NET (en général))
    • Déplacé Christian Robert - MCT - MCM samedi 10 septembre 2011 21:43 SSIS (Origine :SQL Server pour les développeurs)
    vendredi 9 septembre 2011 14:50

Réponses

  • Bonjour

    Ok, je comprends, j'avais toujours eu le cas où le séprateur supplémentaire était dans la dernière colonne, ce qui est assez simple a ignorer.

    Dans votre cas je ne vois rien de simple pour le résoudre.

    Il faudrait passer par un code .Net qui ferais le traitement :

    http://geekswithblogs.net/evankoch/archive/2007/09/19/115450.aspx

    Le problème du code ci-dessus c'est qu'il est écrit pour avoir un nombre de colonnes quelconques sur chaque ligne, il n'est pas fait pour vous permettre d'ignorer le séparateur dans une colonne donnée.

    Une autre idée en passant, essyez se stipulé que le séparateur est : ";"
    Et n'indiquez pas que vous utilisez un marqueur de chaîne de type ""

    Bonne journée


    Christian Robert - MVP SQL Server - Microsoft Certified Master - SQL Server 2008
    Blog : http://www.sqlnco.ch
    Groupe des Utilisateurs Francophone de SQL Server : http://www.guss.fr
    lundi 12 septembre 2011 13:32

Toutes les réponses

  • Bonsoir

    La bonne catégorie pour le poste est celle où je viens de le déplacer : "SQL Server - Décisionnel (modules BI de SQL Server)"
    Elle n'est pas visible sous la MSDN, mais pas de problème on est là aussi pour remettre les questions dans les bonnes catégories.

    Je crois comprendre votre problème j'ai déjà eu pas mal de soucis avec des lignes textes à importer avec des formats peu ordinaires.

    Dans votre situation est ce que SSIS vous ajoute une colonne supplémentaire dans la liste des colonnes, à cause de la présence de ce ;.

    Si oui, essayer de supprimer cette colonne et réessayer d'importer le fichier.

    Bonne soirée


    Christian Robert - MVP SQL Server - Microsoft Certified Master - SQL Server 2008
    Blog : http://www.sqlnco.ch
    Groupe des Utilisateurs Francophone de SQL Server : http://www.guss.fr
    samedi 10 septembre 2011 22:09
  • Bonjour,

    Non, il ne me rajoute pas de colonne supplémentaire.

    La liste des colonnes est nickel. Ce n'est qu'au moment où il parse cette ligne qu'il fait un décalage de colonnes dù à ce ";" et donc cause un overflow.

    Merci

    lundi 12 septembre 2011 08:57
  • Bonjour

    Ok, je comprends, j'avais toujours eu le cas où le séprateur supplémentaire était dans la dernière colonne, ce qui est assez simple a ignorer.

    Dans votre cas je ne vois rien de simple pour le résoudre.

    Il faudrait passer par un code .Net qui ferais le traitement :

    http://geekswithblogs.net/evankoch/archive/2007/09/19/115450.aspx

    Le problème du code ci-dessus c'est qu'il est écrit pour avoir un nombre de colonnes quelconques sur chaque ligne, il n'est pas fait pour vous permettre d'ignorer le séparateur dans une colonne donnée.

    Une autre idée en passant, essyez se stipulé que le séparateur est : ";"
    Et n'indiquez pas que vous utilisez un marqueur de chaîne de type ""

    Bonne journée


    Christian Robert - MVP SQL Server - Microsoft Certified Master - SQL Server 2008
    Blog : http://www.sqlnco.ch
    Groupe des Utilisateurs Francophone de SQL Server : http://www.guss.fr
    lundi 12 septembre 2011 13:32
  • En effet, je me suis déjà demandé si je n'irais pas plus vite en codant le parser moi même.

    Je suis un peu déçu de devoir en arriver là alors que le flat file connecter est sensé pouvoir le faire lui même.

    Enfin bon, quand on a pas le choix...

    Merci

    mardi 13 septembre 2011 09:44
  • Bonjour

    C'est malheureusement souvent le cas avec les source de type Flast File, elles ne sont pas très flexible, j'ai aussi eu qq soucis avec le connecteurs XLS qui mets un type bidon si les premières lignes sont vides.

    Donc souvent faire un import brut et/ou un pré-traitement reste la solution de secours.
    Mais qu'est ce que j'aimerais que ces 2 connecteurs soient améliorés :o)

    Bonne journée


    Christian Robert - MVP SQL Server - Microsoft Certified Master - SQL Server 2008
    Blog : http://www.sqlnco.ch
    Groupe des Utilisateurs Francophone de SQL Server : http://www.guss.fr
    mardi 13 septembre 2011 14:17