[NEWSboard IBMi Forum]

Thema: Replace im CL

  1. #1
    Joe is offline [professional_User]
    Registriert seit
    Mar 2001
    Beiträge
    365

    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

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.236
    Wenn &LIB und &SAVF auf den selben Speicher verweisen.
    Wenn das CLP aufgerufen wird müssen für solche Zwecke unterschiedliche Felder übergeben werden.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  3. #3
    Joe is offline [professional_User]
    Registriert seit
    Mar 2001
    Beiträge
    365
    Zitat Zitat von Fuerchau Beitrag anzeigen
    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

  4. #4
    Registriert seit
    Nov 2003
    Beiträge
    2.306
    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).

  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.236
    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).
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  6. #6
    Joe is offline [professional_User]
    Registriert seit
    Mar 2001
    Beiträge
    365
    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

  1. SQL UPDATE REPLACE begrenzt auf bestimmte Feldlänge!
    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
  •