[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Aug 2006
    Beiträge
    2.077

    CL Text-Datei erstellen/modifizieren

    Hallo *all,

    ich greife mal wieder das Thema Sicherung per FTP auf.
    Dabei stoße ich auf die Problematik den FTP variabel zu gestalten.
    Zur Zeit benutze ich eine Textdatei mit folgenden Inhalt:

    user xx yy
    cd TRANSFER
    lcd TRANSFER
    QUOTE RCMD CLRSAVF FILE(TRANSFER/TRANSFER)
    bin
    put transfer
    QUOTE RCMD CALL TRANSFER/RSTGEL
    QUIT

    Jetzt möchte ich z.B. Transfer durch einen Variablen Namen ersetzen.

    Beim ersten Nachdenken bin ich noch auf keinen Lösungsansatz gestoßen.

    Für Hinweise dankbar.

    GG

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.236
    Versuch es einmal damit (habe ich mal im Dezember 2005 geschrieben und ist immer noch im Einsatz):
    Beispiel:

    Code:
    SCRFTP     RMTSYS(&SERVER) USER(&USER) PASSWORD(&PWD) +     
                 SCRIPT(&FTPPFAD ('del ' *CAT &TMPNAME) +       
                 'namefmt 1' 'sendepsv 0' ('lcd ' *CAT +        
                 &LCLPFAD) ('put ' *CAT &TMPNAME) ('ren ' +     
                 *CAT &TMPNAME *BCAT &ORGNAME)) +               
                 LOG(*OUTFILE) OUTFILE(USMOD_16/XHYDRA1) +      
                 COMPARE('226 Transfer complete.')              
    MONMSG     MSGID(CPF0000) EXEC(CHGVAR VAR(&ERR) +           
                 VALUE('1'))
    Kommando SCRFTP
    Code:
                 CMD        PROMPT('Srcipting FTP')
    
                 PARM       KWD(RMTSYS) TYPE(*CHAR) LEN(256) +
                              SPCVAL((*INTNETADR *INTNETADR)) MIN(1) +
                              EXPR(*YES) VARY(*YES *INT2) +
                              PROMPT('Fernes System')
    
                 PARM       KWD(USER) TYPE(*CHAR) LEN(30) MIN(1) +
                              EXPR(*YES) VARY(*YES *INT2) +
                              PROMPT('Benutzer')
    
                 PARM       KWD(PASSWORD) TYPE(*CHAR) LEN(30) MIN(1) +
                              EXPR(*YES) VARY(*YES *INT2) +
                              DSPINPUT(*PROMPT) PROMPT('Kennwort')
    
                 PARM       KWD(SCRIPT) TYPE(*CHAR) LEN(80) MIN(1) +
                              MAX(100) EXPR(*YES) INLPMTLEN(32) +
                              PROMPT('Auszufhrende FTP-Befehle')
    
                 PARM       KWD(LOG) TYPE(*CHAR) LEN(10) RSTD(*YES) +
                              DFT(*PRINT) VALUES(*PRINT *OUTFILE) +
                              EXPR(*YES) PROMPT('Protokoll')
    
                 PARM       KWD(OUTFILE) TYPE(FILE) DFT(*NONE) +
                              SNGVAL((*NONE)) PROMPT('Protokolldatei')
    
                 PARM       KWD(COMPARE) TYPE(*CHAR) LEN(80) DFT(*NONE) +
                              SPCVAL((*NONE)) EXPR(*YES) VARY(*YES +
                              *INT2) PROMPT('Vergleichszeichenfolge')
    
                 PARM       KWD(INTNETADR) TYPE(*CHAR) LEN(16) VARY(*YES +
                              *INT2) PMTCTL(*PMTRQS) +
                              PROMPT('Internet-Adresse')
    
                 PARM       KWD(CCSID) TYPE(*DEC) LEN(5 0) DFT(*DFT) +
                              RANGE(1 65533) SPCVAL((*DFT 0)) +
                              PMTCTL(*PMTRQS) PROMPT(CCSID)
    
                 PARM       KWD(PORT) TYPE(*DEC) LEN(5 0) DFT(*DFT) +
                              RANGE(1 65535) SPCVAL((*DFT 21) (*SECURE +
                              990)) PMTCTL(*PMTRQS) PROMPT('Port')
    
                 PARM       KWD(SECCNN) TYPE(*CHAR) LEN(10) RSTD(*YES) +
                              DFT(*DFT) SPCVAL((*DFT) (*NONE) (*SSL) +
                              (*IMPLICIT)) PMTCTL(*PMTRQS) +
                              PROMPT('Sichere Verbindung')
    
                 PARM       KWD(DTAPROT) TYPE(*CHAR) LEN(10) RSTD(*YES) +
                              DFT(*DFT) SPCVAL((*DFT) (*CLEAR) +
                              (*PRIVATE)) PMTCTL(*PMTRQS) +
                              PROMPT('Datenschutz')
    
     FILE:       QUAL       TYPE(*NAME) LEN(10)
                 QUAL       TYPE(*NAME) LEN(10) PROMPT('Bibliothek')
    
    CLP für SCRFTP
    Code:
                 PGM        PARM(&RMTSYS &USER &PASSWORD &SCRIPT &LOG +
                              &OUTFILE &COMPARE &INTNETADR &CCSID &PORT +
                              &SECCNN &DTAPROT)
    
                 DCL        VAR(&RMTSYS) TYPE(*CHAR) LEN(258)
                 DCL        VAR(&USER) TYPE(*CHAR) LEN(32)
                 DCL        VAR(&PASSWORD) TYPE(*CHAR) LEN(32)
                 DCL        VAR(&SCRIPT) TYPE(*CHAR) LEN(2000)
                 DCL        VAR(&LOG) TYPE(*CHAR) LEN(10)
                 DCL        VAR(&OUTFILE) TYPE(*CHAR) LEN(20)
                 DCL        VAR(&COMPARE) TYPE(*CHAR) LEN(82)
                 DCL        VAR(&INTNETADR) TYPE(*CHAR) LEN(16)
                 DCL        VAR(&CCSID) TYPE(*DEC) LEN(5)
                 DCL        VAR(&PORT) TYPE(*DEC) LEN(5)
                 DCL        VAR(&SECCNN) TYPE(*CHAR) LEN(10)
                 DCL        VAR(&DTAPROT) TYPE(*CHAR) LEN(10)
    
                 DCL        VAR(&MSGID) TYPE(*CHAR) LEN(7)
                 DCL        VAR(&MSGF) TYPE(*CHAR) LEN(10)
                 DCL        VAR(&MSGL) TYPE(*CHAR) LEN(10)
                 DCL        VAR(&MSGDTA) TYPE(*CHAR) LEN(512)
    
                 DCL        VAR(&SCRINP) TYPE(*CHAR) LEN(10) +
                              VALUE(SCRFTPINP)
                 DCL        VAR(&SCROUT) TYPE(*CHAR) LEN(10) +
                              VALUE(SCRFTPOUT)
    
                 MONMSG     MSGID(CPF0000) EXEC(GOTO CMDLBL(FEHLER))
    
    /* BEREINIGEN INPUT-DATEI */
                 DLTF       FILE(QTEMP/&SCRINP)
                 MONMSG     MSGID(CPF0000) EXEC(DO)
                 RCVMSG     MSGTYPE(*EXCP)
                 ENDDO
    
    /* BEREINIGEN OUTPUT-DATEI */
                 DLTF       FILE(QTEMP/&SCROUT)
                 MONMSG     MSGID(CPF0000) EXEC(DO)
                 RCVMSG     MSGTYPE(*EXCP)
                 ENDDO
    
    /* ERSTELLEN DATEIEN */
                 CRTPF      FILE(QTEMP/&SCRINP) RCDLEN(80)
                 CRTPF      FILE(QTEMP/&SCROUT) RCDLEN(80)
    
    /* šBERSCHREIBUNGEN SETZEN */
                 OVRDBF     FILE(INPUT) TOFILE(QTEMP/&SCRINP) +
                              OVRSCOPE(*CALLLVL)
                 OVRDBF     FILE(OUTPUT) TOFILE(QTEMP/&SCROUT) +
                              OVRSCOPE(*CALLLVL)
    
    /* PROGRAMM-AUSFšHRUNG */
                 CALL       PGM(SCRFTPX) PARM(&RMTSYS &USER &PASSWORD +
                              &SCRIPT &LOG &OUTFILE &COMPARE &INTNETADR +
                              &CCSID &PORT &SECCNN &DTAPROT)
    
                 IF         COND(&LOG = '*PRINT') THEN(DO)
                 OVRPRTF    FILE(QSYSPRT) SPLFNAME(SCRFTP) +
                              OPNSCOPE(*ACTGRPDFN)
                 CPYF       FROMFILE(QTEMP/&SCROUT) TOFILE(QSYSPRT)
                 ENDDO
    
                 IF         COND(&LOG = '*OUTFILE') THEN(DO)
                 CHKOBJ     OBJ(%SST(&OUTFILE 11 10)/%SST(&OUTFILE 1 +
                              10)) OBJTYPE(*FILE) MBR(*FIRST) AUT(*USE)
                 MONMSG     MSGID(CPF0000) EXEC(DO)
                 RCVMSG     MSGTYPE(*EXCP)
                 CRTPF      FILE(%SST(&OUTFILE 11 10)/%SST(&OUTFILE 1 +
                              10)) RCDLEN(80) TEXT('Output from SCRFTP')
                 ENDDO
                 CPYF       FROMFILE(QTEMP/&SCROUT) TOFILE(%SST(&OUTFILE +
                              11 10)/%SST(&OUTFILE 1 10)) MBROPT(*ADD) +
                              FMTOPT(*NOCHK)
                 ENDDO
    
                 RCLRSC
    
                 IF         COND(%BIN(&COMPARE 1 2) = 7 *AND +
                              %SST(&COMPARE 3 7) = 'CPF9898') THEN(DO)
                 SNDPGMMSG  MSGID(CPF9898) MSGF(QCPFMSG) +
                              MSGDTA('Vergleichszeichenfolge nicht +
                              gefunden') TOPGMQ(*PRV) MSGTYPE(*ESCAPE)
                 ENDDO
    
                 SNDPGMMSG  MSGID(CPF9897) MSGF(QCPFMSG) +
                              MSGDTA('FTP-Script erfolgreich +
                              ausgefhrt') TOPGMQ(*PRV) MSGTYPE(*COMP)
                 RETURN
    
    FEHLER:
                 RCVMSG     MSGTYPE(*EXCP) RMV(*NO) MSGDTA(&MSGDTA) +
                              MSGID(&MSGID) MSGF(&MSGF) MSGFLIB(&MSGL)
                 RCLRSC
                 SNDPGMMSG  MSGID(&MSGID) MSGF(&MSGL/&MSGF) +
                              MSGDTA(&MSGDTA) TOPGMQ(*PRV) MSGTYPE(*ESCAPE)
    
                 ENDPGM
    RPGLE für SCRFTPX
    Code:
         h
         fINPUT     o    f   80        disk    usropn
         foutput    if   f   80        disk    usropn
    
         d RMTSYS          s            256    varying
         d USER            s             30    varying
         d PASSWORD        s             30    varying
         d SCRIPT          ds
         d  AnzZl                         5I 0
         d  ScrLin                       80    dim(100)
         d LOG             s             10
         d OUTFILE         s             20
         d COMPARE         s             80    varying
         d INTNETADR       s             16    varying
         d CCSID           s              5p 0
         d PORT            s              5p 0
         d SECCNN          s             10
         d DTAPROT         s             10
    
         d AKT             s              5I 0
         d WKSATZ          ds            80
    
         d QCMD            s            256
         d QCMDL           s             15p 5 inz(256)
    
         iOUTPUT    bb
         i                                  1   80  WKPROT
    
         c     *entry        plist
         c                   parm                    RMTSYS
         c                   parm                    USER
         c                   parm                    PASSWORD
         c                   parm                    SCRIPT
         c                   parm                    LOG
         c                   parm                    OUTFILE
         c                   parm                    COMPARE
         c                   parm                    INTNETADR
         c                   parm                    CCSID
         c                   parm                    PORT
         c                   parm                    SECCNN
         c                   parm                    DTAPROT
    
         c                   open      INPUT
         c                   eval      WKSATZ = USER + ' ' + PASSWORD
         c                   write     INPUT         WKSATZ
         c                   do        AnzZl         AKT
         c                   eval      WKSATZ = ScrLin(AKT)
         c                   write     INPUT         WKSATZ
         c                   enddo
         c                   eval      WKSATZ = 'quit'
         c                   write     INPUT         WKSATZ
         c                   close     INPUT
    
         c* aufrufen FTP
         c                   if        RMTSYS <> '*INTNETADR'
         c                   eval      QCMD = 'FTP RMTSYS(''' + RMTSYS + ''')'
         c                   else
         c                   eval      QCMD = 'FTP RMTSYS(' + RMTSYS + ')'
         c                                  + ' INTNETADR(''' + INTNETADR
         c                                  + ''')'
         c                   endif
         c                   if        CCSID <> *zero
         c                   eval      QCMD = %trim(QCMD)
         c                                  + ' CCSID(' + %char(CCSID) + ')'
         c                   endif
         c                   eval      QCMD = %trim(QCMD)
         c                                  + ' PORT(' + %char(PORT) + ')'
         c                                  + ' SECCNN(' + %trim(SECCNN) + ')'
         c                                  + ' DTAPROT(' + %trim(DTAPROT) + ')'
    
         c                   monitor
         c                   call      'QCMDEXC'
         c                   parm                    QCMD
         c                   parm                    QCMDL
         c                   on-error  *all
         c                   eval      COMPARE = 'CPF9898'
         c                   eval      *inlr = *off
         c                   return
         c                   endmon
    
         c                   if        COMPARE <> '*NONE'
         c                             and COMPARE <> *blank
    
         c                   open      OUTPUT
         c                   do        *hival
         c                   read      OUTPUT
         c                   if        %eof
         c                   leave
         c                   endif
         c                   if        %scan(%trim(COMPARE):WKPROT) > *zero
         c                   eval      COMPARE = 'OK'
         c                   leave
         c                   endif
    
         c                   enddo
         c                   close     OUTPUT
    
         c                   if        COMPARE <> 'OK'
         c                   eval      COMPARE = 'CPF9898'
         c                   endif
    
         c                   endif
    
         c                   eval      *inlr = *off
         c                   return
    
    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
    Registriert seit
    Aug 2006
    Beiträge
    2.077
    Danke,

    werde ich mal analysieren.

    GG

  4. #4
    Registriert seit
    Nov 2003
    Beiträge
    2.306
    Wenn das Eingabeskript dynamisch sein soll, einfach die betreffende Teildatei per Programm erstellen ...

    Zitat Zitat von Fuerchau Beitrag anzeigen
    Code:
         c                   open      INPUT
         c                   eval      WKSATZ = USER + ' ' + PASSWORD
         c                   write     INPUT         WKSATZ
         c                   do        AnzZl         AKT
         c                   eval      WKSATZ = ScrLin(AKT)
         c                   write     INPUT         WKSATZ
         c                   enddo
         c                   eval      WKSATZ = 'quit'
         c                   write     INPUT         WKSATZ
         c                   close     INPUT

  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.236
    Nimm einfach die 3 Quellen, erstelle die Objekte und du hast ein dynamisches SCRFTP-Kommando mit dem du bis zu 100 Befehle (du kannst natürlich auch erweitern auf 300) in einem FTP ausführen kannst.
    Der Quit am Ende wird bei mir ja schon eingebaut.
    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

Similar Threads

  1. XML-Datei aus SQL erstellen
    By svit in forum NEWSboard Programmierung
    Antworten: 8
    Letzter Beitrag: 05-03-15, 08:32
  2. Logische datei erstellen
    By KingofKning in forum NEWSboard Programmierung
    Antworten: 5
    Letzter Beitrag: 28-11-13, 08:01
  3. PDF Datei erstellen
    By Wirnitzer in forum IBM i Hauptforum
    Antworten: 14
    Letzter Beitrag: 06-05-03, 19:55
  4. rtopcb LOG Datei erstellen
    By danielfeurstein in forum IBM i Hauptforum
    Antworten: 0
    Letzter Beitrag: 12-07-02, 10:18
  5. Antworten: 3
    Letzter Beitrag: 29-10-01, 10:07

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •