La macro opère sur des fichiers externes dont les chemins ou les filerefs sont fournis en paramètres (`inloc`, `outloc`, `inref`, `outref`). Elle ne génère pas de données internes pour son propre traitement mais manipule des fichiers binaires existants ou à créer.
1 Bloc de code
MACRO DEFINITION
Explication : Définition de la macro `%mp_binarycopy` avec ses paramètres d'entrée, y compris les chemins de fichiers (inloc, outloc), les références de fichiers (inref, outref), le mode d'opération (CREATE ou APPEND) et une condition d'exécution (iftrue). La macro inclut une variable locale 'mod' et une condition de sortie précoce.
Copié !
%macro mp_binarycopy(
inloc= /* full path and filename of the object to be copied */
,outloc= /* full path and filename of object to be created */
,inref=____in /* override default to use own filerefs */
,outref=____out /* override default to use own filerefs */
,mode=CREATE
,iftrue=%str(1=1)
)/*/STORE SOURCE*/;
%local mod;
%if not(%eval(%unquote(&iftrue))) %then %return;
1
%macro mp_binarycopy(
2
inloc= /* full path and filename of the object to be copied */
3
,outloc= /* full path and filename of object to be created */
4
,inref=____in /* override default to use own filerefs */
5
,outref=____out /* override default to use own filerefs */
6
,mode=CREATE
7
,iftrue=%str(1=1)
8
)/*/STORE SOURCE*/;
9
%local mod;
10
11
%IF not(%eval(%unquote(&iftrue))) %THEN %return;
2 Bloc de code
Pré-traitement (Filerefs)
Explication : Cette section configure les filerefs d'entrée et de sortie. Si les paramètres `inref` ou `outref` n'ont pas été surchargés, la macro crée des filerefs temporaires (`____in`, `____out`) pointant vers les chemins spécifiés par `inloc` et `outloc`. L'option `lrecl=1048576` définit la longueur d'enregistrement logique, et `&mod` est ajouté au fileref de sortie si le mode est 'APPEND'.
Copié !
%if &mode=APPEND %then %let mod=mod;
/* these IN and OUT filerefs can point to anything */
%if &inref = ____in %then %do;
filename &inref &inloc lrecl=1048576 ;
%end;
%if &outref=____out %then %do;
filename &outref &outloc lrecl=1048576 &mod;
%end;
1
%IF &mode=APPEND %THEN %let mod=mod;
2
3
/* these IN and OUT filerefs can point to anything */
4
%IF &inref = ____in %THEN %DO;
5
filename &inref &inloc lrecl=1048576 ;
6
%END;
7
%IF &outref=____out %THEN %DO;
8
filename &outref &outloc lrecl=1048576 &mod;
9
%END;
3 Bloc de code
DATA STEP
Explication : Bloc central de la macro, utilisant une étape `DATA _null_`. Il lit le fichier d'entrée (`infile`) octet par octet (`lrecl=1 recfm=n`) et écrit chaque octet directement dans le fichier de sortie (`file`). `sourcechar $char1.` lit un caractère, `format sourcechar hex2.` le formate en hexadécimal, et `put sourcechar char1.` l'écrit comme un caractère unique, assurant une copie binaire.
Copié !
/* copy the file byte-for-byte */
data _null_;
infile &inref lrecl=1 recfm=n;
file &outref &mod recfm=n;
input sourcechar $char1. @code_sas_json/hsdua2304@gmail.com_SAS_Assignment_2.json;
format sourcechar hex2.;
put sourcechar char1. @code_sas_json/hsdua2304@gmail.com_SAS_Assignment_2.json;
run;
put sourcechar char1. @code_sas_json/hsdua2304@gmail.com_SAS_Assignment_2.json;
8
RUN;
4 Bloc de code
Post-traitement (Libération Filerefs)
Explication : Après l'opération de copie, cette section s'assure que les filerefs temporaires (`____in`, `____out`) créés par la macro sont libérés (`filename ... clear;`), évitant ainsi les conflits de nommage et la consommation de ressources inutiles.
Ce matériel est fourni "tel quel" par We Are Cas. Il n'y a aucune garantie, expresse ou implicite, quant à la qualité marchande ou à l'adéquation à un usage particulier concernant le matériel ou le code contenu dans les présentes. We Are Cas n'est pas responsable des erreurs dans ce matériel tel qu'il existe maintenant ou existera, et We Are Cas ne fournit pas de support technique pour celui-ci.
Informations de Copyright : Copyright (c) 2001-2006 Rodney Sparapani
« Cette macro est un excellent exemple de programmation système sous SAS. Bien que SAS soit principalement connu pour le traitement de tables de données, sa capacité à manipuler des fichiers externes au niveau de l'octet est cruciale pour des tâches telles que la génération de rapports zippés, le transfert de certificats ou la concaténation de fichiers non structurés. »
SAS et tous les autres noms de produits ou de services de SAS Institute Inc. sont des marques déposées ou des marques de commerce de SAS Institute Inc. aux États-Unis et dans d'autres pays. ® indique un enregistrement aux États-Unis. WeAreCAS est un site communautaire indépendant et n'est pas affilié à SAS Institute Inc.
Ce site utilise des cookies techniques et analytiques pour améliorer votre expérience.
En savoir plus.