Précédent   Forum des professionnels en informatique > Logiciels > Solutions d'entreprise > Business Intelligence > SAS > SAS Base
SAS Base Forum d'entraide sur SAS base : étape data, procédures non statistiques, procédures non graphiques, SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 15/06/2011, 11h32   #1
Candidat au titre de Membre du Club
 
Inscription : mai 2008
Messages : 67
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 67
Points : 14
Points : 14
Par défaut Lecture d'un fichier de 388200 caracteres

Bonjour,

Je voudrais lire un fichier de 388200 caracteres dans une etape DATA, seul probleme comme je dois faire des recherches (FIND, SUBSTR,..) dedans j'ai besoin qu'il soit dans une seule variable, mais bien evidemment on ne peut pas depasser 32767 caracteres dans une variable.

Auriez-vous une idée pour une solution de contournement ? Je seche un peu là.

Merci.

Exemple de code qui plante :

Code :
1
2
3
4
5
6
7
8
9
10
 DATA _NULL_;
                        INFILE ficxml LRECL=388200 PAD DELIMITER='¤';
                        length ligne $32767.;
                        input ligne @@;
 
 
                        index_d=FIND(ligne,"Name=""titi"">");
                        index_f=FIND(ligne,"</Property>",index_d);
                        chaine=SUBSTR(ligne,index_d-33,(index_f+11)-(index_d-33));
RUN;
ganjah06 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2011, 13h03   #2
Modérateur
 
Homme Samir SELMANE
Consultant en Business Intelligence
Inscription : février 2011
Messages : 1 006
Détails du profil
Informations personnelles :
Nom : Homme Samir SELMANE
Localisation : France

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : février 2011
Messages : 1 006
Points : 1 703
Points : 1 703
Hello,
Je ne sais pas sur quel OS t'es, mais ce genre de manip quand sa dépasse SAS tu peux exécuter des commandes système (shell, DOS,...) et récupérer ce que tu veux;
dans ton cas je voie que tu ne crées pas de table, quel est l'intéret donc?
Je te propose ce code avec _infile_ ( pas testé):
Code :
1
2
3
4
5
6
7
8
9
10
 
DATA _null_;
 
	INFILE ficxml LRECL=388200 PAD DELIMITER='¤';
	input ;
 
     index_d=FIND(_infile_,"Name=""titi"">");
     index_f=FIND(_infile_,"</Property>",index_d);
     chaine=SUBSTR(_infile_,index_d-33,(index_f+11)-(index_d-33));
RUN;
Question; pourquoi tu ne dévises pas tes lignes /12 par exemple ?
s_a_m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2011, 06h23   #3
Expert Confirmé
 
Avatar de olivier.decourt
 
Homme Olivier Decourt
Formateur en informatique
Inscription : avril 2008
Messages : 1 467
Détails du profil
Informations personnelles :
Nom : Homme Olivier Decourt
Âge : 34
Localisation : France

Informations professionnelles :
Activité : Formateur en informatique
Secteur : Conseil

Informations forums :
Inscription : avril 2008
Messages : 1 467
Points : 2 823
Points : 2 823
Bonjour.
Je ne sais pas si ton code est l'intégralité de ce que tu veux faire, mais on peut contourner la difficulté en travaillant directement sur la ligne lue.
Option SCANOVER : dans INPUT, on peut indiquer qu'on recherche une chaîne comme point de départ d'une valeur.
Code :
1
2
3
4
DATA _null_;
 	INFILE ficxml LRECL=388200 PAD DELIMITER='</Property>' SCANOVER;
	input @"Name=""titi"">" chaine :$50. ;
RUN;
Sinon, sur le fond, ce fichier XML avec des lignes interminables me semble curieux. Il ne viendrait pas d'Unix pour être lu sous Windows par exemple ? Il arrive que le retour à la ligne (codé différemment sur les 2 systèmes) ne soit pas correctement détecté, d'où des lignes immenses.
Jette un oeil à l'option TERMSTR=NL ou LN dans INFILE.
Bon courage.
Olivier
olivier.decourt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2011, 11h34   #4
Membre expérimenté
 
Inscription : avril 2009
Messages : 537
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 537
Points : 540
Points : 540
Ouais je plussoie sur le fichier qui vient d'un autre OS.

ouvre le avec ultraEdit ou psPAd (gratuit)
xav2229 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h08.


 
 
 
 
Partenaires

Hébergement Web