[NEWSboard IBMi Forum]

Thema: CL Basics

Hybrid View

  1. #1
    Registriert seit
    Aug 2006
    Beiträge
    6

    CL Basics

    Guten Tag @ alle. Ich hoffe mir kann jemand helfen.

    Ich versuche ein CL Progamm zu erstellen, das 4 normale CL befehle ausführt, mit 4 möglichen variablen.

    Befehle: CPYTOIMPF FROMFILE(LIB/DBFILE) TOSTMF('/home/DBFILE.as400.csv') MBROPT(*REPLACE) STMFCODPAG(*STMF) RCDDLM(*CRLF) FLDDLM(';')

    CPY OBJ('/home/DBFILE.as400.csv') TOOBJ('/home/DBFILE.pc.csv') FROMCCSID(37) TOCCSID(1208) DTAFMT(*TEXT)

    CHGAUT OBJ('/home/DBFILE.as400.csv') USER(*PUBLIC) DTAAUT(*RWX) OBJAUT(*ALL)

    CHGAUT OBJ('/home/DBFILE.pc.csv') USER(*PUBLIC) DTAAUT(*RWX) OBJAUT(*ALL)

    Variablen:
    - Quellebibliothek (z.B LIB)
    - Quellfile (z.B DBFILE)
    wenn möglich auch mehrere DBFILEs ?
    - Zielpfad (z.B /home/)
    - Zielccsid (z.B. 1208)

    Bis jetzt habe ich mir eine Bibliothek erstellen, die PF QCLSRC erstellt, darin ein member CPYTOCSV

    Dann habe ich versucht die befehle dort einzugeben und die variablen vorher mit DCL zu definieren und einfach im befehl auszutauschen.

    Das hat aber nicht so ganz funktioniert.
    Bin leider blutiger iSeries anfänger, komme aus der win / lin welt.

    Ich hoffe, einer von den hier versammelten experten ist so freundlich, mich in die richtige Richtung zu schubsen.

    Vielen Dank.

    MfG Sebastian Jürges
    Last edited by sjuerges; 27-10-09 at 10:39. Grund: format war im eimer :(

  2. #2
    Registriert seit
    Nov 2003
    Beiträge
    2.403
    So könnte es gehen.
    PHP-Code:
    DCL        VAR(&LIB)     TYPE(*CHARLEN(10)
    DCL        VAR(&DBFILE)  TYPE(*CHARLEN(10)
    DCL        VAR(&PFAD)    TYPE(*CHARLEN(1024)
    DCL        VAR(&STMF1)   TYPE(*CHARLEN(1024)
    DCL        VAR(&STMF2)   TYPE(*CHARLEN(1024)
    DCL        VAR(&TOCCSIDTYPE(*DEC)  LEN(5)

    CHGVAR     VAR(&PFAD)    VALUE('/home/')
    CHGVAR     VAR(&LIB)     VALUE(QWERTZ)
    CHGVAR     VAR(&DBFILE)  VALUE(DATEI)
    CHGVAR     VAR(&TOCCSIDVALUE(1208)

    CHGVAR     VAR(&STMF1)   VALUE(&PFAD *TCAT &DBFILE *TCAT '.as400.csv')
    CHGVAR     VAR(&STMF2)   VALUE(&PFAD *TCAT &DBFILE *TCAT '.pc.csv')

    CPYTOIMPF  FROMFILE(&LIB/&DBFILETOSTMF(&STMF1) +
                 
    MBROPT(*REPLACESTMFCODPAG(*STMF) +
                 
    RCDDLM(*CRLFFLDDLM(';')

    CPY        OBJ(&STMF1TOOBJ(&STMF2FROMCCSID(37) +
                 
    TOCCSID(&TOCCSIDDTAFMT(*TEXT)

    CHGAUT     OBJ(&STMF1USER(*PUBLIC) DTAAUT(*RWXOBJAUT(*ALL)
    CHGAUT     OBJ(&STMF2USER(*PUBLIC) DTAAUT(*RWXOBJAUT(*ALL

  3. #3
    Registriert seit
    Aug 2006
    Beiträge
    6
    Vielen Dank !

    Funktioniert für eine Datei einwandfrei

    2 kleine Fragen:
    1) Der erste CHGVAR Block, überschreibt der nicht eventuell eingegebene aufrufparameter ?

    2) Wie würde ein LOOP funktionieren, der mehrere vorher definierte DBFILE's durchläuft ? In Pseudecode so ungefähr:

    ANZAHLDBFILES=5
    DBFILE1=DATEI1
    DBFILE2=DATEI2
    DBFILE3...

    LOOP FOR DBFILE1 to DBFILEn
    CPYTOIMPF usw...
    ENDLOOP


    Ich habe es getestet mit

    DCL
    VAR(&DBFILE1) TYPE(*CHAR) LEN(10)
    DCL VAR(&DBFILE2) TYPE(*CHAR) LEN(10)

    LOOP1: DOFOR VAR(&DBFILE) FROM(1) TO(5)
    [schnipp]
    ENDDO

    Wollte nich so wie ich das will.

    *edit: +Frage bzgl. Dateilöschung*

    Wenn ich die erste der beiden ausgabedateien, also DBFILE.as400.csv nach dem CPY löschen will, funktioniert das mit
    DLTF /home/DBLFILE.AS400.csv ?
    Last edited by sjuerges; 27-10-09 at 11:59. Grund: +Frage bzgl. Dateilöschung

  4. #4
    Registriert seit
    Nov 2003
    Beiträge
    2.403
    Mit dem DOFOR hab ich bis jetzt noch nichts gemacht. Aber du könntest dieses Programm von einem anderen mehrmals aufrufen lassen, jedes Mal mit anderen Werten. Die CHGVARs mußt du natürlich entfernen wenn die Werte beim Aufruf übergeben werden. Eine Verbindung zu einer Datenstromdatei kann mit den Befehlen DEL, ERASE oder RMVLNK aufgehoben werden.

  5. #5
    Registriert seit
    Aug 2006
    Beiträge
    6
    Ich hab mal folgendes fabriziert:

    PHP-Code:
    DCL        VAR(&PFAD)    TYPE(*CHARLEN(1024VALUE('/home/')
    DCL        VAR(&TOCCSIDTYPE(*DEC)  LEN(5)    VALUE(1208)

    DCL        VAR(&LIB1)     TYPE(*CHARLEN(10VALUE(DBLDTA)
    DCL        VAR(&DBFILE1)  TYPE(*CHARLEN(10VALUE(ARSTAP)

    DCL        VAR(&LIB2)     TYPE(*CHARLEN(10VALUE(DBLDTA)
    DCL        VAR(&DBFILE2)  TYPE(*CHARLEN(10VALUE(ARSTKP)

    DCL        VAR(&LIB3)     TYPE(*CHARLEN(10VALUE(DBLDTA)
    DCL        VAR(&DBFILE3)  TYPE(*CHARLEN(10VALUE(FBSPOP)

    DCL        VAR(&LIB4)     TYPE(*CHARLEN(10VALUE(DBLDTA)
    DCL        VAR(&DBFILE4)  TYPE(*CHARLEN(10VALUE(KDSTAP)

    DCL        VAR(&LIB5)     TYPE(*CHARLEN(10VALUE(DBLDTA)
    DCL        VAR(&DBFILE5)  TYPE(*CHARLEN(10VALUE(KGSTAP)

    DCL        VAR(&LIB6)     TYPE(*CHARLEN(10VALUE(DBLDTA)
    DCL        VAR(&DBFILE6)  TYPE(*CHARLEN(10VALUE(KOSTAP)

    DCL        VAR(&LIB7)     TYPE(*CHARLEN(10VALUE(DBLDTA)
    DCL        VAR(&DBFILE7)  TYPE(*CHARLEN(10VALUE(KUKONP)

    DCL        VAR(&LIB8)     TYPE(*CHARLEN(10VALUE(DBLDTA)
    DCL        VAR(&DBFILE8)  TYPE(*CHARLEN(10VALUE(LISTAP)

    DCL        VAR(&LIB9)     TYPE(*CHARLEN(10VALUE(DBLDTA)
    DCL        VAR(&DBFILE9)  TYPE(*CHARLEN(10VALUE(PRSTAP)

    DCL        VAR(&LIB10)     TYPE(*CHARLEN(10VALUE(DBLDTA)
    DCL        VAR(&DBFILE10)  TYPE(*CHARLEN(10VALUE(RASTAP)

    DCL        VAR(&LIB11)     TYPE(*CHARLEN(10VALUE(DBLDTA)
    DCL        VAR(&DBFILE11)  TYPE(*CHARLEN(10VALUE(SOSTAP)

    DCL        VAR(&LIB12)     TYPE(*CHARLEN(10VALUE(DBLDTA)
    DCL        VAR(&DBFILE12)  TYPE(*CHARLEN(10VALUE(TRSTAP)

    DCL        VAR(&LIB13)     TYPE(*CHARLEN(10VALUE(DBLDTA)
    DCL        VAR(&DBFILE13)  TYPE(*CHARLEN(10VALUE(TSSTAP)

    DCL        VAR(&LIB14)     TYPE(*CHARLEN(10VALUE(DBLDTA)
    DCL        VAR(&DBFILE14)  TYPE(*CHARLEN(10VALUE(TTPOSP)

    DCL        VAR(&LIB15)     TYPE(*CHARLEN(10VALUE(DBLDTA)
    DCL        VAR(&DBFILE15)  TYPE(*CHARLEN(10VALUE(TTSTAP)

    DCL        VAR(&LIB16)     TYPE(*CHARLEN(10VALUE(DBLDTA)
    DCL        VAR(&DBFILE16)  TYPE(*CHARLEN(10VALUE(VPSTAP)

    DCL        VAR(&LIB17)     TYPE(*CHARLEN(10VALUE(DBLDTA)
    DCL        VAR(&DBFILE17)  TYPE(*CHARLEN(10VALUE(VSSTAP)

    DCL        VAR(&LIB18)     TYPE(*CHARLEN(10VALUE(DBLDTA)
    DCL        VAR(&DBFILE18)  TYPE(*CHARLEN(10VALUE(VSSTPP)

    DCL        VAR(&LIB19)     TYPE(*CHARLEN(10VALUE(DBLDTA)
    DCL        VAR(&DBFILE19)  TYPE(*CHARLEN(10VALUE(VTSTAP)

    DCL        VAR(&LIB20)     TYPE(*CHARLEN(10VALUE(DBLDKD)
    DCL        VAR(&DBFILE20)  TYPE(*CHARLEN(10VALUE(XDINFPU)

    DCL        VAR(&LIB)     TYPE(*CHARLEN(10)
    DCL        VAR(&DBFILE)  TYPE(*CHARLEN(10)
    DCL        VAR(&STMF1)   TYPE(*CHARLEN(1024)
    DCL        VAR(&STMF2)   TYPE(*CHARLEN(1024)
    DCL        VAR(&LOOP)    TYPE(*INT)  LEN(2VALUE(0)

    DOFOR      VAR(&LOOP)  FROM(1)  TO(20)

      
    CHGVAR     VAR(&LIB)     VALUE(&LIB *TCAT &LOOP)
      
    CHGVAR     VAR(&DBFILE)  VALUE(&DBFILE *TCAT &LOOP)
      
      
    CHGVAR     VAR(&STMF1)   VALUE(&PFAD *TCAT &DBFILE *TCAT '.as400.csv')
      
    CHGVAR     VAR(&STMF2)   VALUE(&PFAD *TCAT &DBFILE *TCAT '.pc.csv')
      
      
    CPYTOIMPF  FROMFILE(&LIB/&DBFILETOSTMF(&STMF1) +
                 
    MBROPT(*REPLACESTMFCODPAG(*STMF) +
                 
    RCDDLM(*CRLFFLDDLM(';')

      
    CPY        OBJ(&STMF1TOOBJ(&STMF2FROMCCSID(37) +
                 
    TOCCSID(&TOCCSIDDTAFMT(*TEXT)

      
    CHGAUT     OBJ(&STMF1USER(*PUBLIC) DTAAUT(*RWXOBJAUT(*ALL)
      
    CHGAUT     OBJ(&STMF2USER(*PUBLIC) DTAAUT(*RWXOBJAUT(*ALL

    ENDDO 
    Will leider nicht so ganz kompilieren:
    PHP-Code:
        7200-   CHGVAR     VAR(&LIB)     VALUE(&LIB *TCAT &LOOP)   
     * 
    CPD0712 30  Art von Operand  für Operator ungültig.         
     * 
    CPD0711 30  Art der Ausdrucksoperanden unterschiedlich.     
        
    7300-   CHGVAR     VAR(&DBFILE)  VALUE(&DBFILE *TCAT &LOOP)
     * 
    CPD0712 30  Art von Operand  für Operator ungültig.         
     * 
    CPD0711 30  Art der Ausdrucksoperanden unterschiedlich

  6. #6
    Registriert seit
    Nov 2003
    Beiträge
    2.403
    Über dynamisch erzeugte Variablennamen kann man soweit ich weiß in CL nicht auf Variablen zugreifen.

    Aber pack das eigentliche Kopierprogramm doch in ein eigenes Programm (Programm CPYTOCSV2) und mach ein paar CALLs anstelle des DOFORs:
    PHP-Code:
    CALL PGM(CPYTOCSV2PARM(&LIB1 &DBFILE1)
    CALL PGM(CPYTOCSV2PARM(&LIB2 &DBFILE2)
    CALL PGM(CPYTOCSV2PARM(&LIB3 &DBFILE3)
    CALL PGM(CPYTOCSV2PARM(&LIB4 &DBFILE4)
    CALL PGM(CPYTOCSV2PARM(&LIB5 &DBFILE5)
    ... 

  7. #7
    Registriert seit
    Aug 2006
    Beiträge
    6
    Jep. So machichs. Danke für deine Hilfe.

    Problem gelöst. Zwar nicht so elegant wie ich mir das erhofft hatte, aber meh.

    Beggars cant be choosers

    MfG
    SJürges

  8. #8
    Registriert seit
    Aug 2006
    Beiträge
    2.114
    Lib ist char,
    und Loop ist int.

    Das geht nicht. Mußt du vorher umwandeln.

    GG

Similar Threads

  1. Dynamisches SQL in einem CL erstellen
    By Sony in forum IBM i Hauptforum
    Antworten: 27
    Letzter Beitrag: 20-07-09, 21:48
  2. Programmbibliothek in einem Cobol oder CL Programm ermitteln
    By schatte in forum NEWSboard Programmierung
    Antworten: 19
    Letzter Beitrag: 10-01-07, 11:32
  3. "Vary on" in CL
    By RLPforum in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 04-01-07, 14:58
  4. Übergabeparameter im CL Script
    By bo1 in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 23-06-06, 15:00
  5. Bibliothekssicherungsliste via CL ändern
    By becama in forum IBM i Hauptforum
    Antworten: 6
    Letzter Beitrag: 23-06-06, 14:46

Berechtigungen

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