Utilisez cette fonction pour centraliser vos sorties textuelles. En isolant la gestion des accès fichiers dans une fonction compilée, vous réduisez le risque d'erreurs de syntaxe dans vos étapes DATA et facilitez grandement la maintenance de vos programmes en cas de changement d'architecture ou de système de fichiers.
Type : CREATION_INTERNE
Le script ne lit aucune donnée source. Sa finalité est de créer une fonction réutilisable qui, elle-même, écrit des données textuelles fournies en paramètre dans un fichier sur le système de fichiers. L'origine des données traitées par la fonction est donc externe à ce script mais interne à son propre appel.
| 1 | PROC FCMP outlib=&lib..&cat..&pkg; |
| 2 | |
| 3 | function mcf_string2file(filepath $, string $, mode $); |
| 4 | IF mode='APPEND' THEN fmode='a'; |
| 5 | ELSE fmode='o'; |
| 6 | LENGTH fref $8; |
| 7 | rc=filename(fref,filepath); |
| 8 | IF (rc ne 0) THEN return( -1 ); |
| 9 | fid = fopen(fref,fmode); |
| 10 | IF (fid = 0) THEN return( -1 ); |
| 11 | rc=fput(fid, string); |
| 12 | rc=fwrite(fid); |
| 13 | rc=fclose(fid); |
| 14 | rc=filename(fref); |
| 15 | return(0); |
| 16 | endsub; |
| 17 | |
| 18 | |
| 19 | QUIT; |
| 1 | /* insert the CMPLIB if not already there */ |
| 2 | %let cmpval=%sysfunc(getoption(cmplib)); |
| 3 | %let found=0; |
| 4 | %DO i=1 %to %sysfunc(countw(&cmpval,%str( %(%)))); |
| 5 | %let var=%scan(&cmpval,&i,%str( %(%))); |
| 6 | %IF &var=&lib..&cat %THEN %let found=1; |
| 7 | %END; |
| 8 | %IF &found=0 %THEN %DO; |
| 9 | options insert=(CMPLIB=(&lib..&cat)); |
| 10 | %END; |