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 fichier texte : fins de lignes retour chariot (CR)


Sujet :

SAS Base

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 54
    Points : 40
    Points
    40
    Par défaut Import fichier texte : fins de lignes retour chariot (CR)
    Bonjour,

    J'essaie depuis hier d'importer un fichier texte dans sas et ça me ...

    Voilà :
    J'ai un fichier texte délimité par tabulation.
    Le problème (d'après ce que j'ai pu comprendre) c'est que les fins de lignes sont indiquées par un retour chariot (CR) et non par un retour chariot+line feed (CRLF).

    En effet, l'importation du fichier natif bugge via la proc import :

    Impossible d'échantillonner le fichier externe, aucune donnée dans les 5 premiers enregistrements.
    Or, quand je remplace les fins de lignes par un "vrai" retour à la ligne, pas de problème.

    Idem via une étape data :

    La piste que j'avais était "TERMSTR" une option qui permet de spécifier le caractere de fin de ligne.
    Malheureusement, les options de TERMSTR sont :
    CRLF pour un retour "normal"
    LF pour un line-feed (UNIX)
    NL pour new line (UNIX).

    Voilà, je suis un peu désemparé...

    HELP !

  2. #2
    Membre éprouvé
    Avatar de steelspirit
    Homme Profil pro
    SAS discute
    Inscrit en
    Janvier 2008
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SAS discute
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 472
    Points : 916
    Points
    916
    Par défaut
    Bonjour,

    Si ce n'est déja fait essaie avec l'option MISSOVER du infile ex:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    infile "C:\mon_fichier.txt" DLM = '09'x MISSOVER DSD lrecl=100000 ;
    Si avec ça, ça ne marche pas, il y a également l'option IGNOREDOSEOF...

    Bon courage,

    Steel
    Avant de poser votre question, n'oubliez pas :
    FAQ, SAS DOC et de ce forum

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 54
    Points : 40
    Points
    40
    Par défaut
    Désolé, marche pô...

    Mais j'ai trouvé le moyen de récupérer tout le fichier (!) dans une seule variable...

    J'essaie de voir si je peux retravailler cette variable...

    C'est on ne peut plus capillotracté mais bon...

  4. #4
    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 478
    Points
    4 478
    Par défaut
    Salut.
    Effectivement, le problème n'est pas forcément simple, et TERMSTR est l'option qui vient en premier à l'esprit... sauf qu'ici on n'a pas la bonne valeur. Je te propose d'essayer un import en 2 temps : 1) en remplaçant juste le caractère de fin de ligne actuel par un vrai CRLF et 2) en faisant une proc Import toute normale.
    Pour l'étape 1, ça pourrait être un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    DATA _NULL_ ;
       INFILE "mon fichier actuel" ;
       FILE "nouveau fichier" ;
       INPUT ;
       _infile_ = TRANWRD (_infile_, "0D"x, "0D0A"x) ;
       PUT _infile_ ;
    RUN ;
    On peut supprimer la création d'un 2e fichier en faisant un remplacement direct dans le fichier existant, avec l'option SHAREDBUFFERS dans FILE, et à ce moment-là il n'y a pas besoin de PUT. Mais il y a le risque de sagouiner le fichier existant. Donc autant le garder tel quel et bosser sur une copie.
    Dans ce code, "0D"x est un CR et "0D0A"x est CR+LF. J'ai pris les codes hexadécimaux, j'espère qu'ils sont bons, je n'ai pas testé.
    Bon courage.
    Olivier

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 54
    Points : 40
    Points
    40
    Par défaut
    Merci Olivier !

    C'est peut-être effectivement une bonne piste.

    En effet ça marche pas mal mais le problème est qu'il me rajoute des fin de ligne un peu partout .

    J'ai donc essayé avec un éditeur hexadécimal pour voir si il y avait des "0D" cachés mais non...

    En tout cas le remplacement de "0D" par "0D0A" dans l'éditeur hexa marche lui

    J'essaie de voir les options de TRANWRD...

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    747
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 747
    Points : 978
    Points
    978
    Par défaut
    Pour transférer des fichiers textes UNIX vers Windows (et inversement) utilise un logiciel genre FileZilla avec le mode "ascii" (pas "binary").

    Si tu ne maitrises pas le format de fichier (on te l'envoie), tu peux :
    te plaindre a l'envoyeur
    Passer de manière systématique une commande dos2unix ou unix2dos Unix2dos

    Pour reconnaitre le format du fichier (UNIX, ou Win) tu peux utiliser PSPAD , qui va reconnaitre d'office le fichier et te permet de le modifier.

    Xav

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 54
    Points : 40
    Points
    40
    Par défaut
    Y a effectivement plus simple que l'éditeur hexa

    En fait j'utilise Notepad++ et je viens de découvrir qu'il me suffit d'ouvrir le fichier et de faire :
    Format/Convertir en format Windows

    Et voilà tous mes CR transformés en CRLF...

    Mais bon... ça me dit pô si SAS en est capable lui

Discussions similaires

  1. Fichier texte : fin de ligne
    Par meditx dans le forum Langage
    Réponses: 3
    Dernier message: 26/10/2009, 20h26
  2. Créer un fichier texte en PHP et retour à la ligne
    Par GoodWear dans le forum Langage
    Réponses: 3
    Dernier message: 14/10/2009, 14h38
  3. import fichier texte dans table contrainte
    Par philippe281281 dans le forum Outils
    Réponses: 5
    Dernier message: 14/06/2006, 17h01
  4. pb importation fichier texte
    Par borisa dans le forum Access
    Réponses: 5
    Dernier message: 24/02/2006, 17h44
  5. Réponses: 2
    Dernier message: 02/02/2006, 18h21

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