-
Replace im CL
Hallo Forum
Ich übergebe Bibliotheksnamen an ein CL zur Sicherung auf NAS.
Da einige Bibliotheken einen Punkt im Namen haben, soll dieser durch Unterstrich '_' ersetzt werden, um nach der Sicherung in SAVF anschliessend per FTP zu übertragen.
Call aus DSPOBJD:
CALL PGM(PGM) PARM(&ODOBNM &ODOBNM &TYPE &TAGTXT)
&LIB = 'YLBFIB.V3'
&SAVF = 'YLBFIB.V3'
PGM PARM(&LIB &SAVF &TYPE &TAGTXT)
DCL VAR(&LIB) TYPE(*CHAR) LEN(10)
DCL VAR(&SAVF) TYPE(*CHAR) LEN(10)
DCL VAR(&TYPE) TYPE(*CHAR) LEN(4)
DCL VAR(&TAGTXT) TYPE(*CHAR) LEN(10)
DCL VAR(&STELLE) TYPE(*DEC) LEN(2 0)
REPLACE:
CHGVAR VAR(&STELLE) VALUE(&STELLE + 1)
IF COND(&STELLE *LE 10) THEN(DO)
IF COND(%SST(&SAVF &STELLE 1) *EQ '.') THEN(DO)
CHGVAR VAR(%SST(&SAVF &STELLE 1)) VALUE('_')
ENDDO
GOTO REPLACE
ENDDO
&SAVF wird korrekt geändert, jedoch steht der geänderte Name anschliessend (nicht immer) auch in &LIB.
&LIB = 'YLBFIB_V3'
&SAVF = 'YLBFIB_V3'
Gibt es dafür eine Erklärung?
Gruß Joe
-
Wenn &LIB und &SAVF auf den selben Speicher verweisen.
Wenn das CLP aufgerufen wird müssen für solche Zwecke unterschiedliche Felder übergeben werden.
-
Zitat von Fuerchau
Wenn &LIB und &SAVF auf den selben Speicher verweisen.
Wenn das CLP aufgerufen wird müssen für solche Zwecke unterschiedliche Felder übergeben werden.
Hallo und Danke für Anwort.
Also weil in &LIB und &SAVF (obwohl 2 Parameter) das gleiche Feld &ODOBNM übergeben wird, wird der gleiche Speicherbereich angesprochen. Habe ich das so richtig verstanden ?
Gruß Joe
-
Der Speicher von übergebenen bzw. empfangenen Variablen befindet sich im aufrufenden Programm. Und der von den beiden Variablen &LIB und &SAVF ist in diesem Fall der Speicher von &ODOBNM. Es wird jeweils nur ein Zeiger auf diesen Speicherbereich übergeben. Deshalb schlägt eine Änderung der Variable &SAVF direkt auf die Variable &LIB durch und umgekehrt. Siehe hier.
Am besten du übergibst und empfängst &SAVF nicht mehr als Parameter, sondern machst stattdessen im aufgerufenen Programm ein CHGVAR VAR(&SAVF) VALUE(&LIB).
-
Warum soll ich dann den Inhalt auf sich selbst kopieren?
Wenn eine Replace-"Funktion" (in CLP geht das ja nicht) benötigt wird, braucht man auch 2 Variablen.
Nun kann man in CLP die Adressen nicht vergleichen, in RPGLE könnte man mit %ADDR() dieses tun und ein Fehlermeldung ausgeben (ESC-Nachricht).
-
Hallo.
Der Grund für die 2 identischen Parameter:
In meinem Beispiel habe ich einen Teil des rufendes CPL angegeben. Der läuft automatisch ab und übergibt beide Parameter identisch. Es gibt andere Programmteile, in denen der Name der SAVF individuell und abweichend von &LIB mitgegeben wird.
Jetzt kopiere ich im gerufenen Programm den Parameter &LIB in ein Hilfsfeld und damit läuft es.
Vielen Dank noch einmal für die Unterstützung.
Joe
Similar Threads
-
By svente in forum NEWSboard Programmierung
Antworten: 6
Letzter Beitrag: 16-09-14, 13:43
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks