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

SAS Base Discussion :

Import de fichier .csv


Sujet :

SAS Base

  1. #1
    Membre éprouvé
    Homme Profil pro
    Statisticien/développeur BI
    Inscrit en
    Janvier 2012
    Messages
    326
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Statisticien/développeur BI
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2012
    Messages : 326
    Points : 1 142
    Points
    1 142
    Par défaut Import de fichier .csv
    Bonjour à tous,

    Je sèche un peu sur mon problème d'import ... et je suis un peu rouillé dans les options d'infile !

    Alors, pour résumer ...

    Je récupère un fichier .csv (séparateur ";"), qui contient entre autre, un champ commentaire.
    Celui-ci est entre double-côtes, mais peut contenir un retour à la ligne !!!

    Du coup, quand j'importe mon fichier, je me retrouve avec 2 lignes (logique me direz vous !) au lieu d'une seule ...
    J'ai bien essayé avec les options habituelles (DSD, MISSOVER, TRUNCOVER ...) mais rien à faire, je n'arrive à résoudre mon problème.

    Quelqu'un à t'il déjà été confronté à la même problématique ?

    Exemple de fichier reçu (dans ce cas, je dois charger 4 lignes dans ma table et pas 5):

    ID;VAR1;COMMENTAIRE;VAR2
    1;10;"toto tata";100
    2;20;"titi tutu";200
    3;30;"intervention sur le
    périphérique"
    ;300
    4;40;"ha ha ha";400

    Merci de votre aide !

  2. #2
    Expert confirmé
    Avatar de olivier.decourt
    Homme Profil pro
    Formateur R/SAS/statistiques
    Inscrit en
    Avril 2008
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Formateur R/SAS/statistiques
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 064
    Points : 4 476
    Points
    4 476
    Par défaut
    Bonjour.
    Je te propose de travailler en 2 temps, une première lecture pour rectifier le fichier entrant en "raboutant" les deux morceaux de ligne séparées par le retour chariot intempestif (j'espère qu'il n'y en a qu'un au maximum). Une 2e lecture plus classique sur le fichier rectifié.
    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
    22
    23
    DATA _NULL_ ;
       LENGTH _ligne1_ _ligne2_ _res_ $ 4000 ;
       RETAIN _ligne1_ ;
       INFILE "c:/temp/edward.csv" LRECL=4000 ;
       FILE "c:/temp/edward2.csv" LRECL=4000 ;
       INPUT @ ; /* on lit la ligne et on attend */
       _ligne1_ = _infile_ ; /* on stocke la ligne lue */
       nbQuotes = COUNT(_infile_,'"') ;
       INPUT ; /* on lâche cette ligne, on passe à la suite */
       IF MOD(nbQuotes, 2) = 1 THEN DO ; /* une seule quote ? */
    	 INPUT ; /* on lit la ligne suivante */
    	 _ligne2_ = _infile_ ;
         _res_ = CATX(" ", _ligne1_, _ligne2_) ; /* on concatène à la précédente */
       END ;
       ELSE _res_ = _ligne1_ ;
       PUT _res_ ;
       PUTLOG _ALL_ ;
    RUN ;
     
    DATA work.edward ;
      INFILE "c:/temp/edward2.csv" LRECL=4000 DLM=";" DSD MISSOVER FIRSTOBS=2 ;
      INPUT ID VAR1 COMMENTAIRE :$3000. VAR2 ;
    RUN ;
    Bon courage.
    Olivier

  3. #3
    Membre éprouvé
    Homme Profil pro
    Statisticien/développeur BI
    Inscrit en
    Janvier 2012
    Messages
    326
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Statisticien/développeur BI
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2012
    Messages : 326
    Points : 1 142
    Points
    1 142
    Par défaut
    Bonjour Olivier,

    Merci pour la piste de corriger le fichier source ... j'avais espéré une option d'import mais non :-)

    Bon, comme j'ai plusieurs retour chariot, j'ai utilisé l'option recfm=n pour une lecture bit à bit et corriger si besoin (par chance, mes données à corriger sont entre côte !)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    data _null_;
      infile "source.csv" 
    	recfm=n;
      file "sourcecorrigee.csv" 
    	recfm=n;
      input a $char1.;
      retain open 0;
      if a='"' then open=not open;
      if a='0A'x and open then put '7C'x @;
      else put a $char1. @;
    run;

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

Discussions similaires

  1. import de fichier csv
    Par dev7 dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 15/02/2006, 08h23
  2. Import de fichier CSV automatique dans Access
    Par Jmar dans le forum Access
    Réponses: 4
    Dernier message: 20/01/2006, 11h48
  3. Importer un fichier CSV dans un clientdataset ?
    Par mls dans le forum Bases de données
    Réponses: 7
    Dernier message: 15/04/2005, 13h35
  4. [Conseil] Import de fichier CSV vers MySQL
    Par ShinJava dans le forum JDBC
    Réponses: 6
    Dernier message: 15/03/2005, 20h14
  5. Importation de fichier CSV vers une base Interbase
    Par PrinceMaster77 dans le forum ASP
    Réponses: 3
    Dernier message: 15/03/2005, 16h18

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