PDA

View Full Version : rename() und IFS



fabax
06-11-04, 07:42
Hallo Forum,

Ich möchte im IFS eine Datei umbenennen.
Mit der C-funktion rename(), ist das leider nicht möglich wie ich im API-Handbuch nachlesen konnte
#include Qp0lstdi.h fehlt.

Nun meine Frage wie binde ich diesen Header in ein RPG Programm ein
:confused:

KM
08-11-04, 06:02
Hallo,

versuche es doch mal mit folgendem Prototyp:

D* int Qp0lRenameKeep(const char *old, const char *new)
D*----------------------------------------------------------------
D Rename PR 10I 0 ExtProc('Qp0lRenameKeep')
D old * Value options(*string)
D new * Value options(*string)

Gruß,
KM

fabax
08-11-04, 08:28
Hallo KM,

Danke erst mal ,
das mit Qp0lRenameKeep() ist mir schon bekannt, aber leider bekomme ich mit dieser Funktion einen Fehler beim binden. :confused:
Obwohl ich QC2LE eingebunden habe. :eek:

Die Frage ist nun vielmehr genereller Natur -

Wie binde ich eine C-Headerdatei in RPG ein ?
ist dies überhaupt möglich ?
und wenn ... wie ?

BenderD
08-11-04, 09:28
Hallo,

C Prototypen kann man in RPG nicht einbinden, aber C Funktionen, wozu man dann einen Prototyp in RPG braucht: Selbigen kann man auf mehreren Wegen bekommen:
- in QSYSINC nachsehen, ob da einer ist
- den C Prototyp in RPG übersetzen
- auf der Freeware Seite von Thomas Raddatz (tools400.de) nachsehen
am einfachsten und besten ist meist das dritte (aller guten Dinge sind 3)
beim binden muss dann natürlich der Import auflösbar sein, falls das nicht der Fall ist,
- könnte man sich vertippt haben (Groß/Kleinschreibung, Hochkomma vergessen etc.
- QC2LE vergessen haben
- Serviceprogramm ist nicht in QC2LE drin
ansonsten müsste der rename auch über einen Qshell Command möglich sein, den man über system oder QCMDEXC oder QSH auch aus RPG übergeben kann.

mfg

Dieter Bender


Hallo KM,

Danke erst mal ,
das mit Qp0lRenameKeep() ist mir schon bekannt, aber leider bekomme ich mit dieser Funktion einen Fehler beim binden. :confused:
Obwohl ich QC2LE eingebunden habe. :eek:

Die Frage ist nun vielmehr genereller Natur -

Wie binde ich eine C-Headerdatei in RPG ein ?
ist dies überhaupt möglich ?
und wenn ... wie ?

Pikachu
08-11-04, 13:38
Hallo fabax !

Welcher Fehler wird denn gemeldet (siehe erstellte Spooldatei)?
Für welches Release (VRM) wandelst du das Programm?

Gruß
Jürgen

B.Hauser
08-11-04, 13:47
Hallo fabax !

Welcher Fehler wird denn gemeldet (siehe erstellte Spooldatei)?
Für welches Release (VRM) wandelst du das Programm?

Gruß
Jürgen

Fehler, die beim Binden entstehen kann man nicht aus der Umwandlungs-Liste entnehmen.

Sehr oft hilft, das Programm interaktiv umzuwandeln und dann einen Blick ins Joblog werfen. Das ist zwar auch nicht das gelbe vom Ei hilft aber meistens weiter.

Birgitta

BenderD
08-11-04, 14:15
Hallo nochmal,

Ergänzung:
- Qp0lRenameKeep() erfordert das binden des SRVPGMS QP0LLIB1, das ist in QC2LE nicht drin
- BNDDIR QUSAPIBD täte es wohl auch
- die Qshell Funktion heißt mv altName neuName

mfg

Dieter Bender


Hallo KM,

Danke erst mal ,
das mit Qp0lRenameKeep() ist mir schon bekannt, aber leider bekomme ich mit dieser Funktion einen Fehler beim binden. :confused:
Obwohl ich QC2LE eingebunden habe. :eek:

Die Frage ist nun vielmehr genereller Natur -

Wie binde ich eine C-Headerdatei in RPG ein ?
ist dies überhaupt möglich ?
und wenn ... wie ?

KM
09-11-04, 07:38
Hallo,

die Prozedur Qp0lRenameKeep() hat überhaupt nichts mit QC2LE zu tun. Wenn der Prototyp so definiert ist, wie bereits weiter oben angegeben, dann wird auch QP0LLIB1 automatisch gebunden und der "rename" funktioniert auch. Irgendwelche überflüssige Binderverzeichnisse sind da nicht nötig. Dein Binde-Fehler muß eine andere Ursache haben.

Gruß,
KM

BenderD
09-11-04, 10:01
@KM: bei mir wird Qp0lRenameKeep() auch ohne Bindeangaben gebunden, aber ich frage mich schon, ob das eine dokumentierte oder undokumentierte Eigenschaft ist. Bei letzterem könnte es schon Release Stände geben wo eine Bindeangabe erforderlich ist.

mfg

Dieter Bender


Hallo,

die Prozedur Qp0lRenameKeep() hat überhaupt nichts mit QC2LE zu tun. Wenn der Prototyp so definiert ist, wie bereits weiter oben angegeben, dann wird auch QP0LLIB1 automatisch gebunden und der "rename" funktioniert auch. Irgendwelche überflüssige Binderverzeichnisse sind da nicht nötig. Dein Binde-Fehler muß eine andere Ursache haben.

Gruß,
KM

fabax
09-11-04, 13:01
Hallo Forum,

Ich möchte im IFS eine Datei umbenennen.
Mit der C-funktion rename(), ist das leider nicht möglich wie ich im API-Handbuch nachlesen konnte .

Nun meine Frage wie binde ich diesen Header in ein RPG Programm ein
:confused:



Auf der Zielmaschine läuft Version V5.2


Ich habe mir inzwischen mit Rename Object (REN) beholfen. Über system() rufe ich dann den zusammengebauten String ab. :D Danke an BenderD für den Tip.:D


REN OBJ('\Test\alte_datei) NEWOBJ('neue_datei.txt')

Wichtig dabei ist, das in OBJ die alte Datei mit Pfad angeben werden muss. bei NEWOBJ aber nur die neue Datei stehen darf !