PDA

View Full Version : IFS - Attribute von Dateien auslesen



Marius.Ko
01-02-10, 12:29
Hallo zusammen,

ich bin auf der Suche nach einer Möglichkeit, Attribute einer Datei im IFS in eine Variable auszulesen. Wichtig wäre mir das Erstelldatum der Datei.

Ich habe mir mittels QNTC ein Windowsverzeichnis gemappt. Die Dateinamen lesen ich per RPG aus dem Verzeichnis aus. Zusätzlich zu dem Dateinamen bräuchte ich, wie schon gesagt, das Erstelldatum der Datei.

Vielen Dank im vorraus...!! :)

Marius

Fuerchau
01-02-10, 12:41
Da gibts nur die C-Funktionen stat() oder Qp0lGetAttr()--Get Attributes (http://publib.boulder.ibm.com/infocenter/iseries/v5r4/topic/apis/qgetattr.htm?resultof=%22%72%65%74%72%69%65%76%65% 22%20%22%72%65%74%72%69%65%76%22%20%22%69%66%73%22 %20)

Zeitangaben werden immer in Sekunden seit dem 1.1.1970 00:00:00 Uhr GMT gespeichert.
Um also das Datum zu erhalten ist:

d FileDate Z

FileDate = %date('1970-01-01') + %seconds(Zeitwert);

Hinzuzurechnen ist dann noch deine aktuelle Zeitzone QUTCOFFSET.

Einfache gehts ggf. mit der QSH und Dateiausgabe:
cd /MyPath;
ls -lT >/qsys.lib/mylib.lib/myfile.file/myfile.mbr

Spateneder
01-02-10, 14:40
stat() ist einfacher zu handeln, liefert aber kein Erstellungsdatum.
Dann bleibt nur Qp0lGetAttr(), das relativ umfangreich und komplex ist. Ich habe einmal ein Programm geschrieben, das ganze Verzeichnisse oder Verzeichnisstrukturen in zwei Ausgabedateien ausliest. (Eine für die Attribute eines Objekts, die zweite mit einem oder mehreren Berechtigungssätzen eines Objekts). Der Zugriff auf einzelne Objekte war in diesem Programm nicht vorgesehen, aber es wäre vielleicht eine Basis, um darauf weiterzuarbeiten. Auf Wunsch kann ich es Dir gern zukommen lassen. Ist halt relativ umfangreich, weil alle verfügbaren Attribute ausgelesen werden.
Zweiter Vorschlag: Für die letzte Ausgabe von NEWSolutions (Dez./Jan.) habe ich einen Artikel von Scott Klement übersetzt, in dem er eine selbstgeschriebene SQL-Funktion (UDTF) vorstellt, die IFS-Attribute liefert. Diese UDTF ist super, weil sie sehr flexibel einsetzbar ist, arbeitet aber in der bisherigen Version ebenfalls mit stat() und liefert damit kein Erstellungsdatum. Jetzt gibt es eine neue Version, die auf Qp0iGetAttr basiert und damit alle verfügbaren Informationen liefert. Ich bearbeite den Update für das nächste Heft und stelle dann auch den überarbeiteten Code online. Vielleicht kannst Du Dir ja das bisherige Tool mal ansehen, ob es für Deine Zwecke geeignet wäre, und falls ja, mir Bescheid geben, dann beeile ich mich mit dem Code.
Gruß
M. Spateneder

Marius.Ko
02-02-10, 07:27
Vorab erstmal danke für die Antworten!

@ Fuerchau

Ich habe stat() ausprobiert. Aber wie Spateneder schon gesagt hat, gibt es leider kein Erstellungsdatum zu dem Objekt.
Die QSH-Lösung wäre nicht schlecht. Aber leider weis ich nicht wie ich das Ergebnis von QSH in eine Variable in RPG oder in eine Datei ausgebe.

@ Spateneder

Ich hab mir das Qp0lGetAttr() API angeschaut. Es ist wirklich umfangreich. :eek:
Ich gucke mal ob wir die besagte Ausgabe der NEWSolutions noch haben. Wenn nicht würde ich mich noch mal melden.

Danke!

Marius

BenderD
02-02-10, 07:55
@Dateiausgabe: ??? steht doch im posting von Baldur drin! Einfach nur abtippen und ausprobieren!!! Die Ausgabeumleitung ">" ist dein Freund.

D*B

, der sich manchmal fragt, warum sich mancher Antworter mehr Mühe beim schreiben als mancher Frager beim lesen gibt



Vorab erstmal danke für die Antworten!

@ Fuerchau

Ich habe stat() ausprobiert. Aber wie Spateneder schon gesagt hat, gibt es leider kein Erstellungsdatum zu dem Objekt.
Die QSH-Lösung wäre nicht schlecht. Aber leider weis ich nicht wie ich das Ergebnis von QSH in eine Variable in RPG oder in eine Datei ausgebe.

@ Spateneder

Ich hab mir das Qp0lGetAttr() API angeschaut. Es ist wirklich umfangreich. :eek:
Ich gucke mal ob wir die besagte Ausgabe der NEWSolutions noch haben. Wenn nicht würde ich mich noch mal melden.

Danke!

Marius

Marius.Ko
02-02-10, 14:00
Ohh,
danke für den Hinweis! Das ">" hab ich nicht gesehen.
Ich habe hinter ls -lT die Datei im IFS angegeben. :o Ich werde es gleich mal versuchen!