Dateiattribute zum Inhalt dazu lesen

Hallo zusammen,

ich lese mit folgendem Code aus einem (Unix-)Verzeichnis bestimmte Zeilen der dort vorhandenen Dateien ein:

filename eingabe "/sasmnt/user//.lsbatch/*.*";

data content (keep = fullname fname lsfid job callstring);
length nam $ 1024;
length fullname $ 1024;
length fname $ 1024;
length callstring $ 1024;
length lsfid $ 255;
label lsfid = "LSF-ID";
length job $ 255;
label job = "Job";

infile eingabe
truncover
/*Record-Länge für Texte > 256 Zeichen festlegen*/
lrecl=1024
/*maximale Zeilenlänge festlegen*/
ls=1024
filename = nam;

/*Einlesen einer Zeile*/
input @1 callstring $CHAR1024.;

/*Bei jeder Zeile, die einen Programmaufruf mit vorangestelltem Pfad enthält*/
if substr(callstring, 1, 1) = '/' then do;
fullname = nam;
fname = scan(fullname, -2, '/.');
/*Job-Id ist gleich der Extension des Dateinamens*/
lsfid = scan(fullname, -1, '.');
/*Name des SAS-Jobs steht ganz hinten in der gelesenen Zeile*/
job = scan(callstring, -2, '. /#');
output;
end;
run;

Es geht hier konkret um den bei der Banking Intelligence Solution mitgelieferten LSF-Scheduler, der pro aktuell laufendem Job eine Datei in dieses Verzeichnis schreibt, in der auch der konkrete SAS-Aufruf enthalten ist.
Daraus entnehme ich dann den Namen des Jobs und kann ihn entsprechend auflisten.

Jetzt würde ich aber jeweils zu jeder Datei auch deren Erstellungs-/Änderungsdatum und die Uhrzeit auslesen und mit in die output-Tabelle schreiben.

Wie mache ich das?

Oder muss ich mit

proc contents

eine separate Liste erstellen und dann hinzujoinen?

Zu den Stichworten "file" und "attributes" werde ich in der Doku nicht wirklich fündig...

Schönen Gruß

Hallo, das grundsätzliche

Hallo,

das grundsätzliche Vorgehen ist hier und hier beschrieben.

Schöne Grüße

Jan

Leider nicht umsetzbar

Hallo,

der Tip mit dem Pipe ist bei uns leider nicht umsetzbar:

Der Enterprise Guide läuft auf einem Windows Terminal Server, auf dem wir User eben nicht lokale Admins sind. Damit scheitert schon der Versuch eines Pipings an den Berechtigungen.
Der nächste Schritt ist dann der, dass SAS selbst auf dem Unix-Server läuft, aber
statt "dir" kann ich natürlich genauso gut ein "ls -al" pipen (wenn das denn ginge), oder?
Wo wird denn das Pipe eigentlich ausgeführt? Auf dem Client-System, oder auf dem Server, zu dem man connected hat?
Und wie steht es im EG mit dem "Schedule Process Flow"? Wird das Scheduling auf dem Windows-Rechner, oder auf dem verbundenen Unix-Server ausgeführt?
Der SAS-Prozess läuft auf jeden Fall auf dem Unix-System, aber die anderen Sachen?

Schönen Gruß

Olaf Musch

Server Client Kommunikation

Hallo.

Ich gehe davon aus, dass die einzulesenden Dateien externe Files auf dem Server sind, richtig? Deren Erstellungsdatum ist tatsächlich nur via eines Systemkommandos zu extrahieren. Sollte es sich doch um SAS Dateien handeln wäre die SAS I/O-Systemfuntion ATTRN mit dem Attribut CRDTE zu empfehlen, damit can PROC DATASETS oder PROC CONTENTS umgangen werden (ist auch effizienter).

data _null_;
dsid=open("mydata");
pw=attrn(dsid,"crdte");
run;

Geht auch als Macrovariable mit

%sysfunc

.
Wo der Systembefehl (z.B. LS) ausgeführt ist hängt davon ab, wo der Code ausgeführt wird. Im Display Manager (Base SAS oder auch Batch Betrieb) meldet man sich mit signon an den entsprechenden Server an und versendet Code mittels RSUBMIT an diesen. Enthält solcher Code ein Systemcommand, wird dieser auf dem Server ausgeführt. Im Enterprise Guide ist der Server, auf dem der Code ausgeführt werden Menüseitig einzustellen bzw. mit der rechten Maustaste vor Codeausführung zu bestimmen.

HTH
D. Dolic