VBS/SAS pour déplacer un fichier traité

Fermé
Akane42 - 16 janv. 2008 à 17:09
 Akane42 - 17 janv. 2008 à 15:52
Bonjour,

PROBLEMATIQUE :
J'essaie désespérément de supprimer un fichier.txt après qu'il ai été lu et traité par une requête SAS.

CONTEXTE :
J'ai au départ 1 à n fichier de demande d'échantillon dans un répertoire nommé "imports". Ces fichiers contenant les critères d'extractions utilisés par SAS sont des .txt.

Ensuite, je fais tourner une requête SAS qui me permet, normalement, d'aller interroger le répertoire "imports" pour savoir si j'ai des demandes d'extraction et si oui de lancer la requête SAS correspondante.

Jusque là je me débrouille à peu près, là où ça se corse, c'est qu'une fois que j'ai lu et exécuté mon fichier de demande d'échantillon, je souhaiterai le déplacer de mon répertoire "imports" pour le mettre dans le répertoire "imports\traites" pour éviter que mon batch le traite une 2ème fois.
De plus, si jamais j'ai une anomalie du type : mon échantillon n'a pas été correctement généré => vérification de la génération du fichier échantillon correspondant à la demande, avant de déplacer le fichier de demande d'échantillon.

J'ai été faire un tour sur la FAQ VBScript et malheureusement, comme je ne comprends pas tout ce que fais le prog en VBS, ben ça marche pas...
Pouvez-vous m'expliquer ce qui cloche dans mon code ?

Merci d'avance

CODES :
code SAS :

filename indata pipe "dir \\Sw285155\Oscar\Imports /b";

data file_list;
length fname $20 idcont date $8. type $3.;
infile indata truncover; /* infile statement for file names */
input fname $20.; /* read the file names from the directory */
idcont=scan(fname,1);
date=scan(fname,2);
type=scan(fname,3);
run;

data file_list;
set file_list;
call symput ('fich'!!left(_n_),fname);
call symput ('id'!!left(_n_),idcont);
call symput ('nfiles',_n_); /* store the record number in a macro variable */
run;

%macro import;

%do i=1 %to &nfiles;
data cont&&id&i;
%let _EFIERR_ = 0; /* set the ERROR detection macro variable */
infile "\\Sw285155\Oscar\Imports\&&fich&i" delimiter=';' MISSOVER DSD lrecl=32767 firstobs=2 ;
length dtdeb dtfin $9.iduniadm idcontr $8. tyech $3.;
input idcont dtdeb dtfin crit1-crit6 tyech iduniadm popech idcontr;
if _ERROR_ then call symput('_EFIERR_',1); /* set ERROR detection macro variable */
run;

data cont&&id&i;
set cont&&id&i;
if tyech='ECH' and popech=0 then delete;
run;

%inc "\\Sw285155\Oscar\Requetes-SAS\Prgm%left(&&id&i).sas";
%end;

%mend;
%import;

%macro deplacer;
x cscript "\\Sw285155\Oscar\Requetes-SAS\deplacer.vbs";
%mend ;

%deplacer;


Code VBS :
Dim oFSO
Set oFSO = CreateObject("Scripting.FileSystemObject")
oFSO.MoveFile "\\Sw285155\Oscar\Imports\&&fich&i.txt","\\Sw285155\Oscar\Imports\Traités\&&fich&i.txt"
A voir également:

1 réponse

steelspirit Messages postés 277 Date d'inscription lundi 12 mai 2003 Statut Membre Dernière intervention 22 octobre 2008 80
17 janv. 2008 à 11:58
Bonjour,
Pourquoi utilises tu un script VB plutot qu'une commande DOS ???
voici ce que tu peux faire dans ta macro déplacer :
%macro deplacer; 
options noxwait xsync;
x 'move /Y "\\Sw285155\Oscar\Imports\&&fich&i.txt" "\\Sw285155\Oscar\Imports\Traités\" ';
%mend ; 


A noter que tu dois mettre ta macro et son appel dans ta boucle ! même à la limite pas besoin de faire une macro ;-) tu peux écrire la commande après ton %inc.

Sinon &&fich&i.txt me paraît incorrecte : soit tu ta macro-variable contient l'extension et tu mets &&fich&i soit tu mets &&fich&i..txt avec 2 points sinon ça écrit nom_fichiertxt ...

Bon courage

Steel
0
Merci beaucoup Steel.
C'est nickel ^-^.
0