Publié le :
Utilitaire EXTERNE

Copie de fichier binaire multi-plateforme

Ce code est également disponible en : Deutsch English Español
Cette macro, `%mp_binarycopy`, permet de dupliquer un fichier en le lisant octet par octet et en le réécrivant. Elle prend en charge la spécification des chemins de fichiers ('inloc', 'outloc') ou des filerefs ('inref', 'outref') existants. Elle peut soit créer un nouveau fichier, soit ajouter du contenu à un fichier existant via l'option 'mode=APPEND'. La macro gère la création et la libération des filerefs temporaires si des chemins de fichiers sont fournis. Elle est conçue pour être une méthode de copie robuste et agnostique au système d'exploitation. Une note importante mentionne que pour les versions plus récentes de SAS© et si des fonctionnalités comme l'ajout ne sont pas nécessaires, la fonction `fcopy()` pourrait être une alternative plus simple.
Analyse des données

Type : EXTERNE


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é !
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é !
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é !
1 /* copy the file byte-for-byte */
2 DATA _null_;
3 INFILE &inref lrecl=1 recfm=n;
4 file &outref &mod recfm=n;
5 INPUT sourcechar $char1. @code_sas_json/hsdua2304@gmail.com_SAS_Assignment_2.json;
6 FORMAT sourcechar hex2.;
7 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.
Copié !
1 %IF &inref = ____in %THEN %DO;
2 filename &inref clear;
3 %END;
4 %IF &outref=____out %THEN %DO;
5 filename &outref clear;
6 %END;
7%mend mp_binarycopy;
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


Banner
Le Conseil de l'Expert
Expert
Stéphanie
Spécialiste Machine Learning et IA.
« 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. »