Dateien einlesen ohne TERMSTR-Probleme

Aus BI-Snippets - Business Intelligence Code und Module
Wechseln zu: Navigation, Suche

Wer schon einmal Dateien über Systemgrenzen hinweg transferiert und eingelesen hat, kennt sicher das Problem des nicht richtig konvertierten TERMSTR. Das angefügte Makro versucht, den TERMSTR einer einzulesenden Datei automatisch zu ermitteln und schreibt diesen in eine Makrovariable &TERMSTR, die dann im eigentlichen Einlese-Schritt verwendet werden kann. Zeilenende-Fehler und daraus resultierende Jobabbrüche oder - noch schlimmer - fehlerhaft eingelesene Datasets sollten damit nahezu der Vergangenheit angehören. <syntaxhighlight lang="SAS" line="1" >%macro termstr_ermitteln(dateiname);

 %global TERMSTR;
 %let TERMSTR=ERROR;
 filename cr_lf "&dateiname" lrecl=1 recfm=f;
 data _null_;
   infile cr_lf;
   informat x $1. y $1.;
   input x;
   if put(x, $hex2.) in ('0D', '0A') then do;
     input y;
     select;
       when(put(x, $hex2.) eq '0D' and put(y, $hex2.) eq '0A') call symput('TERMSTR', 'CRLF');
       when(put(x, $hex2.) eq '0D') call symput('TERMSTR', 'CR');
       when(put(x, $hex2.) eq '0A') call symput('TERMSTR', 'LF');
       otherwise;
     end;
     stop;
   end;
 run;
 filename cr_lf clear;

%mend;</syntaxhighlight>