Veröffentlicht am :

Plattformübergreifende Binärdateikopie

Dieser Code ist auch verfügbar auf: English Español Français
Dieses Makro, `%mp_binarycopy`, ermöglicht das Duplizieren einer Datei, indem es sie Byte für Byte liest und neu schreibt. Es unterstützt die Angabe von Dateipfaden ('inloc', 'outloc') oder vorhandenen Filerefs ('inref', 'outref'). Es kann entweder eine neue Datei erstellen oder Inhalte über die Option 'mode=APPEND' an eine vorhandene Datei anhängen. Das Makro verwaltet die Erstellung und Freigabe temporärer Filerefs, wenn Dateipfade bereitgestellt werden. Es ist als robuste und betriebssystemunabhängige Kopiermethode konzipiert. Ein wichtiger Hinweis besagt, dass für neuere SAS©-Versionen und wenn Funktionen wie das Anhängen nicht erforderlich sind, die Funktion `fcopy()` eine einfachere Alternative sein könnte.
Datenanalyse

Type : EXTERNE


Das Makro arbeitet mit externen Dateien, deren Pfade oder Filerefs als Parameter (`inloc`, `outloc`, `inref`, `outref`) bereitgestellt werden. Es generiert keine internen Daten für die eigene Verarbeitung, sondern manipuliert vorhandene oder zu erstellende Binärdateien.

1 Codeblock
MAKRO DEFINITION
Erklärung :
Definition des Makros `%mp_binarycopy` mit seinen Eingabeparametern, einschließlich Dateipfaden (inloc, outloc), Dateireferenzen (inref, outref), Betriebsmodus (CREATE oder APPEND) und einer Ausführungsbedingung (iftrue). Das Makro enthält eine lokale Variable 'mod' und eine frühzeitige Beendigungsbedingung.
Kopiert!
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 Codeblock
Vorverarbeitung (Filerefs)
Erklärung :
Dieser Abschnitt konfiguriert die Eingabe- und Ausgabe-Filerefs. Falls die Parameter `inref` oder `outref` nicht überschrieben wurden, erstellt das Makro temporäre Filerefs (`____in`, `____out`), die auf die durch `inloc` und `outloc` angegebenen Pfade verweisen. Die Option `lrecl=1048576` definiert die logische Satzlänge, und `&mod` wird dem Ausgabe-Fileref hinzugefügt, wenn der Modus 'APPEND' ist.
Kopiert!
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 Codeblock
DATA STEP
Erklärung :
Zentraler Block des Makros, der einen `DATA _null_`-Schritt verwendet. Er liest die Eingabedatei (`infile`) Byte für Byte (`lrecl=1 recfm=n`) und schreibt jedes Byte direkt in die Ausgabedatei (`file`). `sourcechar $char1.` liest ein Zeichen, `format sourcechar hex2.` formatiert es hexadezimal, und `put sourcechar char1.` schreibt es als einzelnes Zeichen, um eine binäre Kopie zu gewährleisten.
Kopiert!
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 Codeblock
Nachbearbeitung (Freigabe von Filerefs)
Erklärung :
Nach dem Kopiervorgang stellt dieser Abschnitt sicher, dass die vom Makro erstellten temporären Filerefs (`____in`, `____out`) freigegeben werden (`filename ... clear;`), wodurch Namenskonflikte und unnötiger Ressourcenverbrauch vermieden werden.
Kopiert!
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;
Dieses Material wird von We Are Cas "wie besehen" zur Verfügung gestellt. Es gibt keine ausdrücklichen oder stillschweigenden Garantien hinsichtlich der Marktgängigkeit oder Eignung für einen bestimmten Zweck in Bezug auf die hierin enthaltenen Materialien oder Codes. We Are Cas ist nicht verantwortlich für Fehler in diesem Material, wie es jetzt existiert oder existieren wird, noch bietet We Are Cas technischen Support dafür an.
Urheberrechtsinformationen : Copyright (c) 2001-2006 Rodney Sparapani