PDA

View Full Version : Dateiverarbeitung im IFS



Seiten : [1] 2

stoerfang
04-12-06, 07:20
hallo zusammen,

Was ist will:

habe Dateien ( jpg usw ) in einem lokalen Ordner auf dem PC.
Ich will eine Anwendung schreiben (ILERPG) in der ich diese Dateien in einen Ordner im IFS Verzeichnis kopieren.
Der Ordnername soll per Parameter mitgegeben werden. Wenn dieser noch nicht vorhanden ist, soll dieser mit dem Namen aus dem Parameter erstellt werden.
Wenn dieser schon vorhanden ist, soll er sich den letzen Dateinamen aus diesem Verzeichnis merken xx.03,jpg ( die anderen haben xx.01 und xx.02 )
und die Dateien aus dem lokalen Verzeichnis entsprechend in dieses Verzeichnis kopieren.
Dabei sollen die neuen Dateinamen mit xx.04 beginnend umbenannt werden.

Gibt es dafür überhaupt Befehle in ILERPG oder CL ?
Oder muss ich dies irgendwie mit C++ realisieren?

Vielen Dank und Gruss

Fuerchau
04-12-06, 08:08
Direkte ILERPG-Befehle gibt es nicht.
Wenn du einen C-Compiler hast, ist dies sicherlich der bessere Weg.
Alternativ kannst du C-Befehle aus ILERPG aufrufen "BNDDIR('QC2LE')".

stoerfang
04-12-06, 10:05
ok,
dann werd ich das mal mit C probieren
Danke und Gruss

DVE
04-12-06, 11:36
Es gibt einige viele Funktionen zum Thema IFS die du ohne großen Aufwand in RPGLE erstellen kannst. Dazu gehört auch eine Routine mit denen du ein CHKOBJ auf ein IFS Objekt ausführen kannst.
Dieses in einem CL eingebaut und du kannst dein Problem lösen.

Leider bin ich zur Zeit in Urlaub und kann dir nicht die einzelnen Routinen nennen. Allerdings, bin ich seinerzeit über Google schnell fündig geworden. incl. Beipielsourcen in RPGLE.
Gruß
DVE

Fuerchau
04-12-06, 11:42
@DVE
Wirklich schnell sind diese CMD's ja nicht.

CHKOBJ funktioniert da nicht, hier heißen diese CHKOUT/CHKIN wobei gleichzeitig aber auch eine Sperre gesetzt und somit wieder aufgehoben werden muss.

Um aber den letzten Namen zu ermitteln, ist das so nicht performant, da man ja alle Varianten mittels CHKOUT/CHKIN durchgehen muss.

Notfalls gehts noch mit
QSH CMD('cd pfad; ls >/qsys.lib/mylib.lib/myfile.file/myfile.mbr')
Dann habe ich dort alle vorhandenen Namen.

Wenn aber C/C++ verfügbar ist, dann gehts einfacher mit den Funktionen für Verzeichnisbearbeitung.

BenderD
04-12-06, 11:52
Hallo,

möglicherweise war da auch access gemeint, aber das ganze läuft sowieso auf "embedded C" in RPG raus, sprich Aufruf von C-APIs aus RPG mit übersetzten Prototypen - the original stuff ist da sicher besser. Sicherlich gibts da auch Hexer, die das mit einem Shell Script hinkriegen...

mfg

Dieter Bender


@DVE
Wirklich schnell sind diese CMD's ja nicht.

CHKOBJ funktioniert da nicht, hier heißen diese CHKOUT/CHKIN wobei gleichzeitig aber auch eine Sperre gesetzt und somit wieder aufgehoben werden muss.

Um aber den letzten Namen zu ermitteln, ist das so nicht performant, da man ja alle Varianten mittels CHKOUT/CHKIN durchgehen muss.

Notfalls gehts noch mit
QSH CMD('cd pfad; ls >/qsys.lib/mylib.lib/myfile.file/myfile.mbr')
Dann habe ich dort alle vorhandenen Namen.

Wenn aber C/C++ verfügbar ist, dann gehts einfacher mit den Funktionen für Verzeichnisbearbeitung.

DVE
04-12-06, 11:58
@Fuerchau.
Ich meine nicht CHKOBJ o.ä. sondern die IFS-Api's die man in ein RPGLE einbauen (hab ich schon gemacht) und dann benutzen kann.
Letztendlich habe ich mir (in RPGLE) einige Programme (u.a. ein CHKOBJ oder DSPOBJD ) zusammengebastelt um das IFS auszuwerten.

Gruß
DVE

Spateneder
06-12-06, 15:25
Die IFS-APIs, die man für diese Aufgabe benötigt, sind recht einfach anwendbar. Ich habe schon mehrere ILE-RPG-Anwendungen damit geschrieben (u.a. ein Programm, das die komplette Beschreibung aller IFS-Dateien eines Ordners ausliest und in eine Ausgabedatei schreibt) und kann auch über die Performance nichts negatives sagen. Ein kleines Beispiel kann ich gerne zur Verfügung stellen, bitte bei Bedarf mailen.
Grüße
M. Spateneder

stoerfang
07-12-06, 15:05
hallo zusammen,
habe das jetzt so gemacht:
1. DSPLNK mit der Ausgabe *PRINT
2. CPYSPLF in eine PF
3. Füllen in die Subfile
4. Bearbeiten, umbenennen in der SFL
5. MOV -Befehl

So klappt das eigentlich ganz gut, aber würde mich trotzem über ein kleines Beipsiel freuen !!

Vielen Dank und Gruss

Fuerchau
07-12-06, 17:17
Ganz schön umständlich, zumal die QSHELL umsonst ist:

QSH CMD('cd /pfad; ls -l >/qsys.lib/mylib.lib/myfile.file/myfile.mbr 2>/dev/null')

Falls die Zieldatei nicht vorhanden ist, wird sie sogar angelegt und schnell ist es auch noch.