Publicado el :
Utilidad EXTERNE

Copia de archivo binario multiplataforma

Este código también está disponible en: Deutsch English Français
Esta macro, `%mp_binarycopy`, permite duplicar un archivo leyéndolo byte a byte y reescribiéndolo. Admite la especificación de rutas de archivo ('inloc', 'outloc') o filerefs ('inref', 'outref') existentes. Puede crear un nuevo archivo o añadir contenido a un archivo existente a través de la opción 'mode=APPEND'. La macro gestiona la creación y liberación de filerefs temporales si se proporcionan rutas de archivo. Está diseñada para ser un método de copia robusto e independiente del sistema operativo. Una nota importante menciona que para las versiones más recientes de SAS© y si no se necesitan funcionalidades como la adición, la función `fcopy()` podría ser una alternativa más sencilla.
Análisis de datos

Type : EXTERNE


La macro opera sobre archivos externos cuyas rutas o filerefs se proporcionan como parámetros (`inloc`, `outloc`, `inref`, `outref`). No genera datos internos para su propio procesamiento, sino que manipula archivos binarios existentes o a crear.

1 Bloque de código
MACRO DEFINITION
Explicación :
Definición de la macro `%mp_binarycopy` con sus parámetros de entrada, incluyendo las rutas de archivo (inloc, outloc), las referencias de archivo (inref, outref), el modo de operación (CREATE o APPEND) y una condición de ejecución (iftrue). La macro incluye una variable local 'mod' y una condición de salida temprana.
¡Copiado!
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 Bloque de código
Pré-traitement (Filerefs)
Explicación :
Esta sección configura los filerefs de entrada y salida. Si los parámetros `inref` o `outref` no han sido sobrescritos, la macro crea filerefs temporales (`____in`, `____out`) que apuntan a las rutas especificadas por `inloc` y `outloc`. La opción `lrecl=1048576` define la longitud de registro lógico, y `&mod` se añade al fileref de salida si el modo es 'APPEND'.
¡Copiado!
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 Bloque de código
DATA STEP
Explicación :
Bloque central de la macro, utilizando un paso `DATA _null_`. Lee el archivo de entrada (`infile`) byte a byte (`lrecl=1 recfm=n`) y escribe cada byte directamente en el archivo de salida (`file`). `sourcechar $char1.` lee un carácter, `format sourcechar hex2.` lo formatea en hexadecimal, y `put sourcechar char1.` lo escribe como un carácter único, asegurando una copia binaria.
¡Copiado!
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 Bloque de código
Post-traitement (Libération Filerefs)
Explicación :
Después de la operación de copia, esta sección se asegura de que los filerefs temporales (`____in`, `____out`) creados por la macro sean liberados (`filename ... clear;`), evitando así conflictos de nombres y el consumo de recursos innecesarios.
¡Copiado!
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;
Este material se proporciona "tal cual" por We Are Cas. No hay garantías, expresas o implícitas, en cuanto a la comerciabilidad o idoneidad para un propósito particular con respecto a los materiales o el código contenidos en este documento. We Are Cas no es responsable de los errores en este material tal como existe ahora o existirá, ni We Are Cas proporciona soporte técnico para el mismo.
Información de copyright : Copyright (c) 2001-2006 Rodney Sparapani