//BCHJOB JOB(JFROMCSV) JOBD(NERONI2/NERONI2) OUTQ(QPRINT) + ENDSEV(60) LOG(4 00 *SECLVL) MSGQ(*USRPRF) CCSID(280) /* Open source from www.neroni.it */ /* LA JOB DESCRIPTION "NERONI2/NERONI2" DEVE PREESISTERE. PUO' ESSERE */ /* IDENTICA A QBATCH E PUO' ESSERE SOSTITUITA DA QBATCH O SIMILE. */ /* From System: "DEV720" */ /* From Library: "NERONI2" */ /* Unload Time: 2016-05-31 16:12 */ /* To File : "JFROMCSV" */ /* To Library : "NERONI2" */ /* To Text : "Load CSV to database. Src" */ /********* INIZIO ISTRUZIONI **************************************************/ /* LE SUCCESSIVE ISTRUZIONI PERMETTONO DI RICARICARE I SORGENTI. */ /* 1) DA UN VIDEO COMANDI DELL'AS400 RICEVENTE */ /* CREARE UN FILE SORGENTE DI LUNGHEZZA RECORD 112: */ /* CRTSRCPF FILE(NERONI2/STRINGHE) RCDLEN(112) */ /* 2) SPOSTARE IL FILE "JFROMCSV.txt" NELL'INDIRIZZARIO */ /* DI UN PC CONNESSO IN RETE CON L'AS400 RICEVENTE */ /* (AD ES.: "c:\"). */ /* 3) DAL VIDEO COMANDI DEL PC CHIAMARE FTP: */ /* ftp nomeas400 */ /* 4) DIGITARE UTENTE E PASSWORD. */ /* 5) ESEGUIRE IL COMANDO DI COPIA DA FILE PC A MEMBRO AS400: */ /* put "c:\JFROMCSV.txt" "/qsys.lib/NERONI2.lib/stringhe.file/JFROMCSV.mbr" */ /* 6) ABBANDONARE FTP: */ /* quit */ /* 7) DA UN VIDEO COMANDI DELL'AS400 RICEVENTE */ /* ESEGUIRE LA STRINGA COPIATA NEL MEMBRO SORGENTE: */ /* SBMDBJOB FILE(NERONI2/STRINGHE) MBR(JFROMCSV) JOBQ(QBATCH) */ /* LE SUCCESSIVE ISTRUZIONI PERMETTONO DI CREARE L'UTILITY. */ /* 8) DA UN VIDEO COMANDI DELL'AS400 RICEVENTE */ /* ESEGUIRE LA STRINGA O LE STRINGHE SORGENTE DI TIPO SEU "CL" */ /* (IL CUI NOME TERMINA SEMPRE CON ".") */ /* PRESENTI NEL FILE RICARICATO "NERONI2/JFROMCSV" */ /* FACENDO ATTENZIONE ALL'ORDINE DI ESECUZIONE INDICATO NEL */ /* MEMBRO FACOLTATIVO "A.LEGGIMI", AD ESEMPIO: */ /* SBMDBJOB FILE(NERONI2/JFROMCSV) MBR(JFROMCSV.) JOBQ(QBATCH) */ /********* FINE ISTRUZIONI ****************************************************/ /* Crea la libreria. */ MKDIR DIR('/qsys.lib/NERONI2.lib') CHGLIB LIB(NERONI2) TEXT('Claudio Neroni Utility') /* Imposta la lista librerie. */ CHGLIBL LIBL(QTEMP NERONI2 QGPL) /* Crea il file sorgente. */ DLTF FILE(NERONI2/JFROMCSV) CRTSRCPF FILE(NERONI2/JFROMCSV) RCDLEN(112) + TEXT('Load CSV to database. Src') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JFROMCSV) TOFILE(NERONI2/JFROMCSV) + TOMBR(JFROMCSV) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JFROMCSV) MBR(JFROMCSV) + SRCTYPE(CMD) + TEXT('Load CSV to database. Cmd') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JFROMCSV.) TOFILE(NERONI2/JFROMCSV) + TOMBR(JFROMCSV.) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JFROMCSV) MBR(JFROMCSV.) + SRCTYPE(CL) + TEXT('Load CSV to database. CrtJs') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JFROMCSVC) TOFILE(NERONI2/JFROMCSV) + TOMBR(JFROMCSVC) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JFROMCSV) MBR(JFROMCSVC) + SRCTYPE(CLLE) + TEXT('Load CSV to database. Cpp') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JFROMCSVP) TOFILE(NERONI2/JFROMCSV) + TOMBR(JFROMCSVP) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JFROMCSV) MBR(JFROMCSVP) + SRCTYPE(PNLGRP) + TEXT('Load CSV to database. Help') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JFROMCSV1) TOFILE(NERONI2/JFROMCSV) + TOMBR(JFROMCSV1) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JFROMCSV) MBR(JFROMCSV1) + SRCTYPE(PF) + TEXT('Load CSV to database. Generic 100x256') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JFROMCSV2) TOFILE(NERONI2/JFROMCSV) + TOMBR(JFROMCSV2) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JFROMCSV) MBR(JFROMCSV2) + SRCTYPE(PF) + TEXT('Load CSV to database. Generic 200x163') /*----------------------------------------------------------------------------*/ //DATA FILE(JFROMCSV) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /* Claudio Neroni 11-06-2007 Creato. */ /* Load CSV to Database. */ /* Carica CSV in Database. */ CMD PROMPT('Load CSV to database') PARM KWD(PROTOFILE) TYPE(PROTOFILE) MIN(1) + PROMPT('Prototype file') PROTOFILE: QUAL TYPE(*NAME) SPCVAL((JFROMCSV1) (JFROMCSV2)) QUAL TYPE(*NAME) DFT(*LIBL) SPCVAL((*LIBL)) + MIN(0) PROMPT('library') PARM KWD(TOFILE) TYPE(TOFILE) + SNGVAL((*PROTOFILE)) MIN(1) PROMPT('To + database file') TOFILE: QUAL TYPE(*NAME) QUAL TYPE(*NAME) DFT(QTEMP) SPCVAL((QTEMP) + (*LIBL) (*PROTOLIB)) PROMPT('library') PARM KWD(FROMCSV) TYPE(*PNAME) LEN(256) + SPCVAL((*PROTOFILE) (*TOFILE)) MIN(1) + PROMPT('From CSV file (no extension)') PARM KWD(FROMDIR) TYPE(*PNAME) LEN(256) DFT(*USR) + SPCVAL((*USR) ('/home/mydir') (*UF) + (*XX)) PROMPT('From directory') PARM KWD(RPLTOFILE) TYPE(*CHAR) LEN(4) RSTD(*YES) + DFT(*NO) VALUES(*NO *YES) + PROMPT('Replaces existing to file') PARM KWD(FROMRCD) TYPE(*DEC) LEN(9) DFT(2) + PROMPT('Copy from record number') PARM KWD(REFPGM) TYPE(*NAME) LEN(10) DFT(*CPP) + SPCVAL((*CPP)) PROMPT('Reference program + for messages') //ENDSRC /*----------------------------------------------------------------------------*/ //DATA FILE(JFROMCSV.) FILETYPE(*SRC) ENDCHAR('//ENDSRC') //BCHJOB JOB(JFROMCSV.) JOBD(NERONI2/NERONI2) OUTQ(QPRINTS) + ENDSEV(60) LOG(4 00 *SECLVL) MSGQ(*USRPRF) CCSID(280) jmy /* Claudio Neroni 07-06-2007 Creato. */ /* JFROMCSV */ /* Load CSV to Database. */ /* Carica CSV in Database. */ /* Prerequisiti: JRSNMSG */ /* Imposta la lista librerie. */ CHGLIBL LIBL(QTEMP QGPL) ADDLIBLE LIB(NERONI2) POSITION(*AFTER QTEMP) /* Cancella il file messaggi preesistente. */ DLTMSGF MSGF(NERONI2/JFROMCSV) /* Cancella i testi d'aiuto preesistenti. */ DLTPNLGRP PNLGRP(NERONI2/JFROMCSVP) /* Cancella i logici preesistenti. */ /* Cancella i fisici preesistenti. */ DLTF FILE(NERONI2/JFROMCSV1) DLTF FILE(NERONI2/JFROMCSV2) /* Cancella i comandi preesistenti. */ DLTCMD CMD(NERONI2/JFROMCSV) /* Cancella i programmi preesistenti. */ DLTPGM PGM(NERONI2/JFROMCSVC) /* Crea i file fisici. */ CRTPF FILE(NERONI2/JFROMCSV1) SRCFILE(JFROMCSV) SIZE(*NOMAX) CRTPF FILE(NERONI2/JFROMCSV2) SRCFILE(JFROMCSV) SIZE(*NOMAX) /* Crea i file logici. */ /* Crea i comandi. */ CRTCMD CMD(NERONI2/JFROMCSV) PGM(JFROMCSVC) SRCFILE(JFROMCSV) + HLPPNLGRP(JFROMCSVP) HLPID(CMD) PRDLIB(NERONI2) /* Duplica i comandi in QGPL. */ CRTPRXCMD CMD(QGPL/JFROMCSV) TGTCMD(NERONI2/JFROMCSV) AUT(*USE) + REPLACE(*YES) /* Crea i programmi. */ CRTBNDCL PGM(NERONI2/JFROMCSVC) SRCFILE(JFROMCSV) TGTRLS(*CURRENT) + DBGVIEW(*ALL) /* Crea il file messaggi. */ CRTMSGF MSGF(NERONI2/JFROMCSV) TEXT('Load CSV to database. Msgf') /* Fotografia comandi (xxxA001). */ /* Messaggi comuni a pgm di comandi diversi (xxx0001). */ /* Messaggi nei pgm del Cmd 1 (xxx0101). */ ADDMSGD MSGID(JFC0101) MSGF(NERONI2/JFROMCSV) MSG('Il file &1/&2 + prototipo di database non esiste') FMT((*CHAR 10) + (*CHAR 10)) ADDMSGD MSGID(JFC0102) MSGF(NERONI2/JFROMCSV) + MSG('L''indirizzario datore IFS &1 non esiste') + FMT((*CHAR 256)) ADDMSGD MSGID(JFC0103) MSGF(NERONI2/JFROMCSV) MSG('Il file IFS + datore &1 non esiste.') FMT((*CHAR 600)) ADDMSGD MSGID(JFC0104) MSGF(NERONI2/JFROMCSV) MSG('La libreria + ricevente &1 non esiste') FMT((*CHAR 10)) ADDMSGD MSGID(JFC0105) MSGF(NERONI2/JFROMCSV) MSG('Cancellazione + preliminare vietata se ricevente uguale a prototipo.') ADDMSGD MSGID(JFC0106) MSGF(NERONI2/JFROMCSV) MSG('File ricevente + &1/&2 esiste gia''') FMT((*CHAR 10) (*CHAR 10)) ADDMSGD MSGID(JFC0191) MSGF(NERONI2/JFROMCSV) MSG('Copiato il + file datore IFS &3 nel file di database ricevente + &1/&2') FMT((*CHAR 10) (*CHAR 10) (*CHAR 600)) ADDMSGD MSGID(JFC0192) MSGF(NERONI2/JFROMCSV) MSG('Copiato il + file datore IFS &5 nel file di database ricevente + &1/&2, prototipo &3/&4') FMT((*CHAR 10) (*CHAR 10) + (*CHAR 10) (*CHAR 10) (*CHAR 600)) /* Messaggi nei pgm del Cmd 2 (xxx0201). */ /* Messaggi dei Cmd (xxx1001). */ /* Messaggi del Vcp (xxxB001). */ /* Crea i testi d'aiuto. */ CRTPNLGRP PNLGRP(NERONI2/JFROMCSVP) SRCFILE(JFROMCSV) //ENDBCHJOB //ENDSRC /*----------------------------------------------------------------------------*/ //DATA FILE(JFROMCSVC) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /* Claudio Neroni 07-06-2007 Creato. */ /* Load CSV to Database. */ /* Carica CSV in Database. */ /* */ PGM PARM(&PROTOFILEQ &TOFILEQ &FROMCSV &FROMDIR + &RPLTOFILE &FROMRCD &REFPGM) /* Riceve Nome qualificato del file prototipo. */ DCL VAR(&PROTOFILEQ) TYPE(*CHAR) LEN(20) /* Riceve Nome qualificato del file ricevente. */ DCL VAR(&TOFILEQ) TYPE(*CHAR) LEN(20) /* Riceve Nome CSV di provenienza. */ DCL VAR(&FROMCSV) TYPE(*CHAR) LEN(256) /* Riceve Nome indirizzario di provenienza. */ DCL VAR(&FROMDIR) TYPE(*CHAR) LEN(256) /* Riceve Richiesta sostituzione del file ricevente preesistente. */ DCL VAR(&RPLTOFILE) TYPE(*CHAR) LEN(4) /* Riceve Numero di record di inizio copia. */ DCL VAR(&FROMRCD) TYPE(*DEC) LEN(9 0) /* Riceve Programma di riferimento per i messaggi. */ DCL VAR(&REFPGM) TYPE(*CHAR) LEN(10) /* File prototipo. */ DCL VAR(&PROTOFILE) TYPE(*CHAR) LEN(10) /* Libreria del File prototipo. */ DCL VAR(&PROTOLIB) TYPE(*CHAR) LEN(10) /* File ricevente. */ DCL VAR(&TOFILE) TYPE(*CHAR) LEN(10) /* Libreria del File ricevente. */ DCL VAR(&TOLIB) TYPE(*CHAR) LEN(10) /* Indirizzo e Nome del file CSV da caricare. */ DCL VAR(&FROMSTMF) TYPE(*CHAR) LEN(600) /* Prototipo e ricevente sono uguali. */ DCL VAR(&EQ) TYPE(*LGL) VALUE('0') /* Utente corrente. */ DCL VAR(&CURUSER) TYPE(*CHAR) LEN(10) /* Prenotazione del CPF0001. */ DCL VAR(&CPF0001) TYPE(*LGL) /* Intercetta tutti gli errori imprevisti. */ MONMSG MSGID(CPF0000 MCH0000 CEE0000) EXEC(GOTO + CMDLBL(ERRORE)) /* Estrae parametri. */ CHGVAR VAR(&PROTOFILE) VALUE(%SST(&PROTOFILEQ 1 10)) CHGVAR VAR(&PROTOLIB) VALUE(%SST(&PROTOFILEQ 11 10)) CHGVAR VAR(&TOFILE) VALUE(%SST(&TOFILEQ 1 10)) CHGVAR VAR(&TOLIB) VALUE(%SST(&TOFILEQ 11 10)) /* Se richiesto *CPP (Command Processing Program) come programma */ /* di riferimento dei messaggi, assume il nome del programma corrente. */ IF COND(&REFPGM *EQ *CPP) THEN(DO) JCALLER CALLER(&REFPGM) KINSHIP(*FATHER) ENDDO /* Recupera Utente corrente. */ RTVJOBA CURUSER(&CURUSER) /* Controlla l'esistenza del file prototipo. */ CHKOBJ OBJ(&PROTOLIB/&PROTOFILE) OBJTYPE(*FILE) MONMSG MSGID(CPF0000 MCH0000) EXEC(DO) SNDPGMMSG MSGID(JFC0101) MSGF(JFROMCSV) + MSGDTA(&PROTOLIB *CAT &PROTOFILE) + TOPGMQ(*PRV (&REFPGM)) MSGTYPE(*DIAG) GOTO CMDLBL(CPF0001) ENDDO /* Se la libreria del file prototipo e' *LIBL, */ /* trasforma *LIBL in un nome di libreria. */ IF COND(&PROTOLIB *EQ *LIBL) THEN(DO) RTVOBJD OBJ(&PROTOFILE) OBJTYPE(*FILE) + RTNLIB(&PROTOLIB) ENDDO /* Se come nome ricevente e' richiesto il prototipo, lo assume. */ IF COND(&TOFILE *EQ *PROTOFILE) THEN(DO) CHGVAR VAR(&TOFILE) VALUE(&PROTOFILE) CHGVAR VAR(&TOLIB) VALUE(&PROTOLIB) ENDDO /* Se come libreria ricevente e' richiesta la lista librerie, */ /* cerca il file in lista e assume la libreria trovata. */ IF COND(&TOLIB *EQ *LIBL) THEN(DO) RTVOBJD OBJ(*LIBL/&TOFILE) OBJTYPE(*FILE) + RTNLIB(&TOLIB) ENDDO /* Se come libreria ricevente e' richiesta la libreria */ /* del prototipo, la assume. */ IF COND(&TOLIB *EQ *PROTOLIB) THEN(DO) CHGVAR VAR(&TOLIB) VALUE(&PROTOLIB) ENDDO /* Se prototipo e ricevente sono uguali, lo annota. */ IF COND((&TOFILE *EQ &PROTOFILE) *AND (&TOLIB + *EQ &PROTOLIB)) THEN(CHGVAR VAR(&EQ) + VALUE('1')) /* Se come nome del file datore e' richiesto il prototipo, lo assume. */ IF COND(&FROMCSV *EQ *PROTOFILE) THEN(DO) CHGVAR VAR(&FROMCSV) VALUE(&PROTOFILE) ENDDO /* Se come nome del file datore e' richiesto il ricevente, lo assume. */ IF COND(&FROMCSV *EQ *TOFILE) THEN(DO) CHGVAR VAR(&FROMCSV) VALUE(&TOFILE) ENDDO /* Se richiesto il valore speciale "*USR" dell'indizzario di carico, */ /* costruisce un percorso. */ IF COND(&FROMDIR *EQ *USR) THEN(CHGVAR + VAR(&FROMDIR) VALUE('/home/' *CAT &CURUSER)) /* Se richiesto il valore speciale "*UF" dell'indizzario di scarico, */ /* costruisce un percorso. */ IF COND(&FROMDIR *EQ *UF) THEN(CHGVAR VAR(&FROMDIR) + VALUE('/webufhtml/' *CAT &CURUSER)) /* Se richiesto il valore speciale "*XX" dell'indizzario di scarico, */ /* costruisce un percorso. */ IF COND(&FROMDIR *EQ *XX) THEN(CHGVAR VAR(&FROMDIR) + VALUE('/webufhtml/' *CAT &CURUSER *TCAT + '/XX')) /* Controlla l'esistenza dell'indirizzario di scarico. */ CHKIN OBJ(&FROMDIR) MONMSG MSGID(CPFA0DA) MONMSG MSGID(CPF0000 MCH0000) EXEC(DO) SNDPGMMSG MSGID(JFC0102) MSGF(JFROMCSV) + MSGDTA(&FROMDIR) TOPGMQ(*PRV (&REFPGM)) + MSGTYPE(*DIAG) GOTO CMDLBL(CPF0001) ENDDO /* Compone il nome del CSV da caricare. */ CHGVAR VAR(&FROMSTMF) VALUE(&FROMDIR *TCAT '/' + *TCAT &FROMCSV *TCAT '.csv') /* Controlla l'esistenza del CSV da caricare. */ CHKIN OBJ(&FROMSTMF) MONMSG MSGID(CPF0000 MCH0000) EXEC(DO) SNDPGMMSG MSGID(JFC0103) MSGF(JFROMCSV) + MSGDTA(&FROMSTMF) TOPGMQ(*PRV (&REFPGM)) + MSGTYPE(*DIAG) GOTO CMDLBL(CPF0001) ENDDO /* Controlla l'esistenza della libreria ricevente. */ CHKOBJ OBJ(QSYS/&TOLIB) OBJTYPE(*LIB) MONMSG MSGID(CPF0000 MCH0000) EXEC(DO) SNDPGMMSG MSGID(JFC0104) MSGF(JFROMCSV) MSGDTA(&TOLIB) + TOPGMQ(*PRV (&REFPGM)) MSGTYPE(*DIAG) GOTO CMDLBL(CPF0001) ENDDO /* Se prototipo e ricevente sono uguali */ /* ed e' richiesta la cancellazione preliminare, errore. */ IF COND(&EQ *AND (&RPLTOFILE *EQ *YES)) THEN(DO) SNDPGMMSG MSGID(JFC0105) MSGF(JFROMCSV) TOPGMQ(*PRV + (&REFPGM)) MSGTYPE(*DIAG) GOTO CMDLBL(CPF0001) ENDDO /* Se prototipo e ricevente sono diversi */ /* e se non e' richiesta la cancellazione preliminare del ricevente, */ /* controlla la mancanza del file ricevente. */ IF COND((*NOT &EQ) *AND (&RPLTOFILE *EQ *NO)) + THEN(DO) CHKOBJ OBJ(&TOLIB/&TOFILE) OBJTYPE(*FILE) MONMSG MSGID(CPF0000) EXEC(GOTO CMDLBL(CHKOUTEND)) SNDPGMMSG MSGID(JFC0106) MSGF(JFROMCSV) MSGDTA(&TOLIB + *CAT &TOFILE) TOPGMQ(*PRV (&REFPGM)) + MSGTYPE(*DIAG) GOTO CMDLBL(CPF0001) ENDDO CHKOUTEND: /* Se prototipo e ricevente sono diversi */ /* e se e' richiesta la cancellazione preliminare del ricevente, */ /* la esegue. */ IF COND((*NOT &EQ) *AND (&RPLTOFILE *EQ *YES)) + THEN(DO) DLTF FILE(&TOLIB/&TOFILE) MONMSG MSGID(CPF0000 MCH0000) ENDDO /* Se prototipo e ricevente sono diversi, */ /* crea il file ricevente. */ IF COND(*NOT &EQ) THEN(DO) CPYF FROMFILE(&PROTOLIB/&PROTOFILE) + TOFILE(&TOLIB/&TOFILE) MBROPT(*REPLACE) + CRTFILE(*YES) NBRRCDS(1) MONMSG MSGID(CPF0000 MCH0000) ENDDO /* Pulisce il file ricevente. */ CLRPFM FILE(&TOLIB/&TOFILE) /* Carica il file CSV. */ CPYFRMIMPF FROMSTMF(&FROMSTMF) TOFILE(&TOLIB/&TOFILE) + MBROPT(*REPLACE) RCDDLM(*CRLF) + DTAFMT(*DLM) STRDLM('"') FLDDLM(';') + DECPNT(*COMMA) FROMRCD(&FROMRCD) + RPLNULLVAL(*FLDDFT) /* Se prototipo e ricevente sono uguali, messaggia completamento. */ IF COND(&EQ) THEN(DO) SNDPGMMSG MSGID(JFC0191) MSGF(JFROMCSV) MSGDTA(&TOLIB + *CAT &TOFILE *CAT &FROMSTMF) TOPGMQ(*PRV + (&REFPGM)) MSGTYPE(*COMP) MONMSG MSGID(CPF0000 MCH0000) ENDDO /* Se prototipo e ricevente sono diversi, messaggia completamento. */ ELSE CMD(DO) SNDPGMMSG MSGID(JFC0192) MSGF(JFROMCSV) MSGDTA(&TOLIB + *CAT &TOFILE *CAT &PROTOLIB *CAT + &PROTOFILE *CAT &FROMSTMF) TOPGMQ(*PRV + (&REFPGM)) MSGTYPE(*COMP) MONMSG MSGID(CPF0000 MCH0000) ENDDO JRQT CMD(RUNQRY QRYFILE((&TOLIB/&TOFILE)) + RCDSLT(*YES)) REFPGM(&REFPGM) MONMSG MSGID(CPF0000 MCH0000) /* Label di esecuzione delle attivita' finali. */ RCLRSC: /* Dealloca... */ /* Riacquisisce le risorse. */ RCLRSC MONMSG MSGID(CPF0000 MCH0000) /* Se richiesto, rilascia il CPF0001. */ IF COND(&CPF0001) THEN(DO) SNDPGMMSG MSGID(CPF0001) MSGF(QCPFMSG) + MSGDTA(JFROMCSV) MSGTYPE(*ESCAPE) MONMSG MSGID(CPF0000 MCH0000) ENDDO /* Ritorna. */ RETURN /* Label di errore. */ ERRORE: /* Restituisce i messaggi al chiamante, */ /* trasformando eventuali escape in diagnostici. */ JRSNMSG MONMSG MSGID(CPF0000 MCH0000) /* Label di prenotazione del CPF0001. */ CPF0001: /* Prenota il CPF0001. */ CHGVAR VAR(&CPF0001) VALUE('1') MONMSG MSGID(CPF0000 MCH0000) /* Salta alle attivita' finali. */ GOTO CMDLBL(RCLRSC) ENDPGM //ENDSRC /*----------------------------------------------------------------------------*/ //DATA FILE(JFROMCSVP) FILETYPE(*SRC) ENDCHAR('//ENDSRC') :PNLGRP. :IMPORT NAME='*' PNLGRP=JPNL. .*------------------------------------------------------------------------------ :HELP NAME=CMD. :H3.Comando JFROMCSV :H2.Carica un file CSV nel database :P.Il comando permette di caricare un file di flusso in formato CSV dentro un file fisico dell'AS400. :P.Normalmente il file di flusso proviene da un foglio Excel scaricato in formato CSV e giacente in un indirizzario IFS. :P.Per indirizzario IFS si intende un indirizzario giacente su AS400 ed indirizzabile tramite il comando :HP2.WRKLNK:EHP2.. Sul lato pc si accede al medesimo indirizzario essenzialmente tramite FTP. In una rete ben fatta e' solitamente possibile vedere un indirizzario IFS anche tramite la gestione risorse del pc. :P.Il comando e' una semplice iterfaccia verso il :HP2.CPYFRMIMPF:EHP2. veramente delicatuccio per un rapido uso. :P.Purtroppo, inoltre, il caricamento da Excel tende cronicamente a fallire a causa di dati sporchi che vorrebbero entrare in campi numerici. Non volendo intervenire a monte sulla qualita' dei dati nel foglio CSV da caricare, si consiglia quindi di trasportare egualmente tali dati in un transito dotato di soli campi alfanumerici. :P.A tale scopo, la presente utility fornisce anche un file di comodo :HP2.JFROMCSVG:EHP2. da usare come prototipo per caricare qualunque flusso CSV con un tracciato di 256 campi alfanumerici (il numero massimo di colonne in Excel) con campi lunghi fino a 100 caratteri. Se si trovano dati oltre i 100 caratteri, si puo' usare un secondo prototipo :HP2.JFROMCSVG2:EHP2. con un tracciato di 163 campi alfanumerici lunghi fino a 200 caratteri. 163 perche', moltiplicato per la lunghezza dei campi 200, raggiunge la insuperabile lunghezza massima di un record nel database. I campi di questi due file sono tutti alfanumerici. Lo scopo e' il caricamento a tutti i costi dei dati su AS400 in un transito da elaborare in seconda battuta con programma di pulizia ad hoc dei dati sporchi. In tal modo si possono preelaborare quei dati che non e' possibile caricare, cosi' come sono, nei campi numerici, loro destinazione finale. :EHELP. .*------------------------------------------------------------------------------ :HELP name='CMD/protofile'. :H3.Prototype file (PROTOFILE) - file :P.Nome del file dati contenente il tracciato secondo il quale deve essere ricaricato il file CSV proveniente da Excel. :P.Valori permessi: :PARML. :PT.nome-file-dati :PD.Il valore e' obbligatorio. :PT.JFROMCSVG :PD.Nome del file dati di comodo il cui tracciato, fornito dalla presente utility, contiene 256 campi alfanumerici di 100 caratteri. :PT.JFROMCSVG2 :PD.Nome del file dati di comodo il cui tracciato, fornito dalla presente utility, contiene 163 campi alfanumerici di 200 caratteri. :EPARML. :H3.Prototype file (PROTOFILE) - library :P.Nome della libreria in cui risiede il file. :P.Valori permessi: :PARML. :PT.:PK DEF.*LIBL:EPK. :PD.Il file dati viene cercato in lista librerie. :PT.nome-libreria :PD.Il file dati viene cercato nella libreria richiesta. :EPARML. :EHELP. .*------------------------------------------------------------------------------ :HELP name='CMD/tofile'. :H3.To file (TOFILE) - file :P.Nome del file AS400 destinato a contenere i dati provenienti dal file CSV a sua volta scaricato da Excel. :P.Se il file ricevente preesiste ed e' diverso dal prototipo, viene prima cancellato e poi ricreato. :P.Valori permessi: :PARML. :PT.nome-file-dati :PD.Il valore e' obbligatorio. :PT.*PROTOFILE :PD.Il file ricevente coincide con il file prototipo. :EPARML. :H3.To file (TOFILE) - library :P.Nome della libreria in cui risiede il file ricevente. :P.Valori permessi: :PARML. :PT.:PK DEF.QTEMP:EPK. :PD.Il file dati viene cercato in libreria temporanea. :PT.nome-libreria :PD.Il file dati viene cercato nella libreria richiesta. :EPARML. :EHELP. .*------------------------------------------------------------------------------ :HELP name='CMD/fromcsv'. :H3.From CSV File (no extension) (FROMCSV) :P.Nome del file pc giacente nell'IFS in formato CSV scaricato da Excel. :P.Il nome qui riportato deve essere senza estensione poiche' l'estensione obbligatoria del file pc e' sempre ".CSV". :P.Valori permessi: :PARML. :PT.nome-file-pc :PD.Il valore e' obbligatorio. :PT.*PROTOFILE :PD.Il nome del file pc coincide col nome del file prototipo. :PT.*TOFILE :PD.Il nome del file pc coincide col nome del file ricevente. :EPARML. :EHELP. .*------------------------------------------------------------------------------ :HELP name='CMD/fromdir'. :H3.From Directory (FROMDIR) :P.Nome dell'indirizzario IFS in cui giace il file pc da caricare. :P.Tutto quanto e' indirizzabile nel parametro :HP2.OBJ:EHP2. del comando :HP2.WRKLNK:EHP2. puo' essere indirizzato anche in questo parametro. :P.Si raccomanda tuttavia che sia un sottoindirizzario di "/home", come consigliato dalla letteratura per i dati utente. :P.Valori permessi: :PARML. :PT.indirizzario-IFS :PD.Nome dell'indirizzario in cui cercare il file pc. :EPARML. :P.Valori speciali: :PARML. :PT.:PK DEF.*USR:EPK. :PD.Il nome dell'indirizzario IFS viene composto riunendo "/home/" con il nome dell'utente corrente. :PT./home/mydir :PD.La presente entrata costituisce un semplice promemoria sulla forma del parametro. :PT.*UF :PD.Il nome dell'indirizzario IFS viene composto riunendo "/webufhtml/" con il nome dell'utente corrente. :PT.*XX :PD.Il nome dell'indirizzario IFS viene composto riunendo "/webufhtml/", il nome dell'utente corrente e "/xx". :EPARML. :EHELP. .*------------------------------------------------------------------------------ :HELP name='CMD/rpltofile'. :H3.Replaces existing To File (RPLTOFILE) :P.Sostituisce il file ricevente. :P.Valori permessi: :PARML. :PT.:PK DEF.*NO:EPK. :PD.Se il file ricevente esiste gia', non viene sostituito e il caricamento viene rifiutato. :PT.*YES :PD.Se il file ricevente esiste gia' ed e' diverso dal prototipo, viene sostituito. Se il file ricevente coincide col prototipo, i dati del prototipo vengono sostituiti. :EPARML. :EHELP. .*------------------------------------------------------------------------------ :HELP name='CMD/fromrcd'. :H3.Copy from record number (FROMRCD) :P.Copia i record dal file pc a partire dal numero progressivo di record qui richiesto. :P.Normalmente il primo record di un file CSV contiene le intestazioni nella forma di testo che non trovano posto nel tracciato del file AS400 corrispondente. Il parametro corrente permette di saltare quei primi record CSV che darebbero errore sul file ricevente. :P.Valori permessi: :PARML. :PT.:PK DEF.2:EPK. :PD.La copia dal file CSV al file AS400 avviene a partire dal secondo record. :PT.numero-intero :PD.La copia dal file CSV al file AS400 avviene a partire dal numero di record qui richiesto. :EPARML. :EHELP. .*------------------------------------------------------------------------------ :HELP name='CMD/refpgm'. :IMHELP NAME='refpgm'. :EHELP. .*------------------------------------------------------------------------------ :HELP NAME='CMD/COMMAND/EXAMPLES'. :XH3.Esempi per JFROMCSV :P.:HP2.Preparazione:EHP2. :P.Per costruire l'esempio avendo un file CSV con caratteristiche conosciute, si genera preliminarmente il file CSV in IFS facendo uso del comando :HP2.JTOCSV:EHP2. e dell'esempio di scarico spiegato nell'help relativo, qui ricapitolato. :P.Genera un file da scaricare: :XMP. :HP2. > DSPFD FILE(NERONI2/JRSNMSG) TYPE(*MBRLIST) OUTPUT(*OUTFILE) OUTFILE(QTEMP/TEST) :EHP2. Il file di emissione TEST e' stato creato nella libreria QTEMP. Il membro TEST e' stato aggiunto al file di emissione TEST nella libreria QTEMP. 6 record sono stati aggiunti al membro TEST nel file TEST in QTEMP. :EXMP. :P.Scarica il file CSV: :XMP. :HP2. > JTOCSV FROMFILE(QTEMP/TEST) RMVBLANK(*TRAILING) :EHP2. Copiato il file di database datore QTEMP/TEST nel file IFS ricevente /home/NERONI/QTEMP-TEST.csv > /**/DSPF STMF('/home/NERONI/QTEMP-TEST.csv') :EXMP. :P.:HP2.Esempio 1: Carica da IFS un file CSV in un file di database usando come prototipo di definizione il file di database che genero' lo scarico.:EHP2. :P.Carica il file ottenuto in IFS tramite la soprastante "Preparazione". :XMP. :HP2. > JFROMCSV PROTOFILE(QTEMP/TEST) TOFILE(TESTRELOAD) FROMCSV('QTEMP-TEST') FROMRCD(3) :EHP2. Copiato il file datore IFS /home/NERONI/QTEMP-TEST.csv nel file di database ricevente QTEMP/TESTRELOAD, prototipo QTEMP/TEST > /**/RUNQRY QRYFILE((QTEMP/TESTRELOAD)) RCDSLT(*YES) :EXMP. :P.Per vedere il risultato si puo' duplicare ed eseguire il comando prototipo /**/ visibile nel log. :P.:HP2.Esempio 2: Carica da IFS un file CSV in un file di database usando come prototipo di definizione un file generico di servizio.:EHP2. :P.Carica il file ottenuto in IFS tramite la soprastante "Preparazione". :XMP. :HP2. > JFROMCSV PROTOFILE(JFROMCSV1) TOFILE(TESTRELOAD) FROMCSV('QTEMP-TEST') RPLTOFILE(*YES) FROMRCD(3) :EHP2. Copiato il file datore IFS /home/NERONI/QTEMP-TEST.csv nel file di database ricevente QTEMP/TESTRELOAD, prototipo NERONI2/JFROMCSV1 > /**/RUNQRY QRYFILE((QTEMP/TESTRELOAD)) RCDSLT(*YES) :EXMP. :P.Per vedere il risultato si puo' duplicare ed eseguire il comando prototipo /**/ visibile nel log. :EHELP. .*------------------------------------------------------------------------------ :HELP NAME='CMD/ERROR/MESSAGES'. :XH3.Messaggi informativi e di completamento :P.:HP3.Messaggi *INFO e *COMP:EHP3. :DL COMPACT. :DT.JFC0191 :DD.&MSG(JFC0191,JFROMCSV,*LIBL,nosub). :DT.JFC0192 :DD.&MSG(JFC0192,JFROMCSV,*LIBL,nosub). :EDL. .*--------------------- :XH3.Messaggi di errore :P.:HP3.Messaggi *DIAG seguiti da *ESCAPE CPF0001:EHP3. :DL COMPACT. :DT.JFC0101 :DD.&MSG(JFC0101,JFROMCSV,*LIBL,nosub). :DT.JFC0102 :DD.&MSG(JFC0102,JFROMCSV,*LIBL,nosub). :DT.JFC0103 :DD.&MSG(JFC0103,JFROMCSV,*LIBL,nosub). :DT.JFC0104 :DD.&MSG(JFC0104,JFROMCSV,*LIBL,nosub). :DT.JFC0105 :DD.&MSG(JFC0105,JFROMCSV,*LIBL,nosub). :DT.JFC0106 :DD.&MSG(JFC0106,JFROMCSV,*LIBL,nosub). :EDL. :EHELP. .*------------------------------------------------------------------------------ :EPNLGRP. //ENDSRC /*----------------------------------------------------------------------------*/ //DATA FILE(JFROMCSV1) FILETYPE(*SRC) ENDCHAR('//ENDSRC') A R RCD TEXT('Ricevitore generico per CSV') A F001 100 COLHDG('A ') A F002 R COLHDG('B ') REFFLD(F001 *SRC) A F003 R COLHDG('C ') REFFLD(F001 *SRC) A F004 R COLHDG('D ') REFFLD(F001 *SRC) A F005 R COLHDG('E ') REFFLD(F001 *SRC) A F006 R COLHDG('F ') REFFLD(F001 *SRC) A F007 R COLHDG('G ') REFFLD(F001 *SRC) A F008 R COLHDG('H ') REFFLD(F001 *SRC) A F009 R COLHDG('I ') REFFLD(F001 *SRC) A F010 R COLHDG('J ') REFFLD(F001 *SRC) A F011 R COLHDG('K ') REFFLD(F001 *SRC) A F012 R COLHDG('L ') REFFLD(F001 *SRC) A F013 R COLHDG('M ') REFFLD(F001 *SRC) A F014 R COLHDG('N ') REFFLD(F001 *SRC) A F015 R COLHDG('O ') REFFLD(F001 *SRC) A F016 R COLHDG('P ') REFFLD(F001 *SRC) A F017 R COLHDG('Q ') REFFLD(F001 *SRC) A F018 R COLHDG('R ') REFFLD(F001 *SRC) A F019 R COLHDG('S ') REFFLD(F001 *SRC) A F020 R COLHDG('T ') REFFLD(F001 *SRC) A F021 R COLHDG('U ') REFFLD(F001 *SRC) A F022 R COLHDG('V ') REFFLD(F001 *SRC) A F023 R COLHDG('W ') REFFLD(F001 *SRC) A F024 R COLHDG('X ') REFFLD(F001 *SRC) A F025 R COLHDG('Y ') REFFLD(F001 *SRC) A F026 R COLHDG('Z ') REFFLD(F001 *SRC) A F027 R COLHDG('AA') REFFLD(F001 *SRC) A F028 R COLHDG('AB') REFFLD(F001 *SRC) A F029 R COLHDG('AC') REFFLD(F001 *SRC) A F030 R COLHDG('AD') REFFLD(F001 *SRC) A F031 R COLHDG('AE') REFFLD(F001 *SRC) A F032 R COLHDG('AF') REFFLD(F001 *SRC) A F033 R COLHDG('AG') REFFLD(F001 *SRC) A F034 R COLHDG('AH') REFFLD(F001 *SRC) A F035 R COLHDG('AI') REFFLD(F001 *SRC) A F036 R COLHDG('AJ') REFFLD(F001 *SRC) A F037 R COLHDG('AK') REFFLD(F001 *SRC) A F038 R COLHDG('AL') REFFLD(F001 *SRC) A F039 R COLHDG('AM') REFFLD(F001 *SRC) A F040 R COLHDG('AN') REFFLD(F001 *SRC) A F041 R COLHDG('AO') REFFLD(F001 *SRC) A F042 R COLHDG('AP') REFFLD(F001 *SRC) A F043 R COLHDG('AQ') REFFLD(F001 *SRC) A F044 R COLHDG('AR') REFFLD(F001 *SRC) A F045 R COLHDG('AS') REFFLD(F001 *SRC) A F046 R COLHDG('AT') REFFLD(F001 *SRC) A F047 R COLHDG('AU') REFFLD(F001 *SRC) A F048 R COLHDG('AV') REFFLD(F001 *SRC) A F049 R COLHDG('AW') REFFLD(F001 *SRC) A F050 R COLHDG('AX') REFFLD(F001 *SRC) A F051 R COLHDG('AY') REFFLD(F001 *SRC) A F052 R COLHDG('AZ') REFFLD(F001 *SRC) A F053 R COLHDG('BA') REFFLD(F001 *SRC) A F054 R COLHDG('BB') REFFLD(F001 *SRC) A F055 R COLHDG('BC') REFFLD(F001 *SRC) A F056 R COLHDG('BD') REFFLD(F001 *SRC) A F057 R COLHDG('BE') REFFLD(F001 *SRC) A F058 R COLHDG('BF') REFFLD(F001 *SRC) A F059 R COLHDG('BG') REFFLD(F001 *SRC) A F060 R COLHDG('BH') REFFLD(F001 *SRC) A F061 R COLHDG('BI') REFFLD(F001 *SRC) A F062 R COLHDG('BJ') REFFLD(F001 *SRC) A F063 R COLHDG('BK') REFFLD(F001 *SRC) A F064 R COLHDG('BL') REFFLD(F001 *SRC) A F065 R COLHDG('BM') REFFLD(F001 *SRC) A F066 R COLHDG('BN') REFFLD(F001 *SRC) A F067 R COLHDG('BO') REFFLD(F001 *SRC) A F068 R COLHDG('BP') REFFLD(F001 *SRC) A F069 R COLHDG('BQ') REFFLD(F001 *SRC) A F070 R COLHDG('BR') REFFLD(F001 *SRC) A F071 R COLHDG('BS') REFFLD(F001 *SRC) A F072 R COLHDG('BT') REFFLD(F001 *SRC) A F073 R COLHDG('BU') REFFLD(F001 *SRC) A F074 R COLHDG('BV') REFFLD(F001 *SRC) A F075 R COLHDG('BW') REFFLD(F001 *SRC) A F076 R COLHDG('BX') REFFLD(F001 *SRC) A F077 R COLHDG('BY') REFFLD(F001 *SRC) A F078 R COLHDG('BZ') REFFLD(F001 *SRC) A F079 R COLHDG('CA') REFFLD(F001 *SRC) A F080 R COLHDG('CB') REFFLD(F001 *SRC) A F081 R COLHDG('CC') REFFLD(F001 *SRC) A F082 R COLHDG('CD') REFFLD(F001 *SRC) A F083 R COLHDG('CE') REFFLD(F001 *SRC) A F084 R COLHDG('CF') REFFLD(F001 *SRC) A F085 R COLHDG('CG') REFFLD(F001 *SRC) A F086 R COLHDG('CH') REFFLD(F001 *SRC) A F087 R COLHDG('CI') REFFLD(F001 *SRC) A F088 R COLHDG('CJ') REFFLD(F001 *SRC) A F089 R COLHDG('CK') REFFLD(F001 *SRC) A F090 R COLHDG('CL') REFFLD(F001 *SRC) A F091 R COLHDG('CM') REFFLD(F001 *SRC) A F092 R COLHDG('CN') REFFLD(F001 *SRC) A F093 R COLHDG('CO') REFFLD(F001 *SRC) A F094 R COLHDG('CP') REFFLD(F001 *SRC) A F095 R COLHDG('CQ') REFFLD(F001 *SRC) A F096 R COLHDG('CR') REFFLD(F001 *SRC) A F097 R COLHDG('CS') REFFLD(F001 *SRC) A F098 R COLHDG('CT') REFFLD(F001 *SRC) A F099 R COLHDG('CU') REFFLD(F001 *SRC) A F100 R COLHDG('CV') REFFLD(F001 *SRC) A F101 R COLHDG('CW') REFFLD(F001 *SRC) A F102 R COLHDG('CX') REFFLD(F001 *SRC) A F103 R COLHDG('CY') REFFLD(F001 *SRC) A F104 R COLHDG('CZ') REFFLD(F001 *SRC) A F105 R COLHDG('DA') REFFLD(F001 *SRC) A F106 R COLHDG('DB') REFFLD(F001 *SRC) A F107 R COLHDG('DC') REFFLD(F001 *SRC) A F108 R COLHDG('DD') REFFLD(F001 *SRC) A F109 R COLHDG('DE') REFFLD(F001 *SRC) A F110 R COLHDG('DF') REFFLD(F001 *SRC) A F111 R COLHDG('DG') REFFLD(F001 *SRC) A F112 R COLHDG('DH') REFFLD(F001 *SRC) A F113 R COLHDG('DI') REFFLD(F001 *SRC) A F114 R COLHDG('DJ') REFFLD(F001 *SRC) A F115 R COLHDG('DK') REFFLD(F001 *SRC) A F116 R COLHDG('DL') REFFLD(F001 *SRC) A F117 R COLHDG('DM') REFFLD(F001 *SRC) A F118 R COLHDG('DN') REFFLD(F001 *SRC) A F119 R COLHDG('DO') REFFLD(F001 *SRC) A F120 R COLHDG('DP') REFFLD(F001 *SRC) A F121 R COLHDG('DQ') REFFLD(F001 *SRC) A F122 R COLHDG('DR') REFFLD(F001 *SRC) A F123 R COLHDG('DS') REFFLD(F001 *SRC) A F124 R COLHDG('DT') REFFLD(F001 *SRC) A F125 R COLHDG('DU') REFFLD(F001 *SRC) A F126 R COLHDG('DV') REFFLD(F001 *SRC) A F127 R COLHDG('DW') REFFLD(F001 *SRC) A F128 R COLHDG('DX') REFFLD(F001 *SRC) A F129 R COLHDG('DY') REFFLD(F001 *SRC) A F130 R COLHDG('DZ') REFFLD(F001 *SRC) A F131 R COLHDG('EA') REFFLD(F001 *SRC) A F132 R COLHDG('EB') REFFLD(F001 *SRC) A F133 R COLHDG('EC') REFFLD(F001 *SRC) A F134 R COLHDG('ED') REFFLD(F001 *SRC) A F135 R COLHDG('EE') REFFLD(F001 *SRC) A F136 R COLHDG('EF') REFFLD(F001 *SRC) A F137 R COLHDG('EG') REFFLD(F001 *SRC) A F138 R COLHDG('EH') REFFLD(F001 *SRC) A F139 R COLHDG('EI') REFFLD(F001 *SRC) A F140 R COLHDG('EJ') REFFLD(F001 *SRC) A F141 R COLHDG('EK') REFFLD(F001 *SRC) A F142 R COLHDG('EL') REFFLD(F001 *SRC) A F143 R COLHDG('EM') REFFLD(F001 *SRC) A F144 R COLHDG('EN') REFFLD(F001 *SRC) A F145 R COLHDG('EO') REFFLD(F001 *SRC) A F146 R COLHDG('EP') REFFLD(F001 *SRC) A F147 R COLHDG('EQ') REFFLD(F001 *SRC) A F148 R COLHDG('ER') REFFLD(F001 *SRC) A F149 R COLHDG('ES') REFFLD(F001 *SRC) A F150 R COLHDG('ET') REFFLD(F001 *SRC) A F151 R COLHDG('EU') REFFLD(F001 *SRC) A F152 R COLHDG('EV') REFFLD(F001 *SRC) A F153 R COLHDG('EW') REFFLD(F001 *SRC) A F154 R COLHDG('EX') REFFLD(F001 *SRC) A F155 R COLHDG('EY') REFFLD(F001 *SRC) A F156 R COLHDG('EZ') REFFLD(F001 *SRC) A F157 R COLHDG('FA') REFFLD(F001 *SRC) A F158 R COLHDG('FB') REFFLD(F001 *SRC) A F159 R COLHDG('FC') REFFLD(F001 *SRC) A F160 R COLHDG('FD') REFFLD(F001 *SRC) A F161 R COLHDG('FE') REFFLD(F001 *SRC) A F162 R COLHDG('FF') REFFLD(F001 *SRC) A F163 R COLHDG('FG') REFFLD(F001 *SRC) A F164 R COLHDG('FH') REFFLD(F001 *SRC) A F165 R COLHDG('FI') REFFLD(F001 *SRC) A F166 R COLHDG('FJ') REFFLD(F001 *SRC) A F167 R COLHDG('FK') REFFLD(F001 *SRC) A F168 R COLHDG('FL') REFFLD(F001 *SRC) A F169 R COLHDG('FM') REFFLD(F001 *SRC) A F170 R COLHDG('FN') REFFLD(F001 *SRC) A F171 R COLHDG('FO') REFFLD(F001 *SRC) A F172 R COLHDG('FP') REFFLD(F001 *SRC) A F173 R COLHDG('FQ') REFFLD(F001 *SRC) A F174 R COLHDG('FR') REFFLD(F001 *SRC) A F175 R COLHDG('FS') REFFLD(F001 *SRC) A F176 R COLHDG('FT') REFFLD(F001 *SRC) A F177 R COLHDG('FU') REFFLD(F001 *SRC) A F178 R COLHDG('FV') REFFLD(F001 *SRC) A F179 R COLHDG('FW') REFFLD(F001 *SRC) A F180 R COLHDG('FX') REFFLD(F001 *SRC) A F181 R COLHDG('FY') REFFLD(F001 *SRC) A F182 R COLHDG('FZ') REFFLD(F001 *SRC) A F183 R COLHDG('GA') REFFLD(F001 *SRC) A F184 R COLHDG('GB') REFFLD(F001 *SRC) A F185 R COLHDG('GC') REFFLD(F001 *SRC) A F186 R COLHDG('GD') REFFLD(F001 *SRC) A F187 R COLHDG('GE') REFFLD(F001 *SRC) A F188 R COLHDG('GF') REFFLD(F001 *SRC) A F189 R COLHDG('GG') REFFLD(F001 *SRC) A F190 R COLHDG('GH') REFFLD(F001 *SRC) A F191 R COLHDG('GI') REFFLD(F001 *SRC) A F192 R COLHDG('GJ') REFFLD(F001 *SRC) A F193 R COLHDG('GK') REFFLD(F001 *SRC) A F194 R COLHDG('GL') REFFLD(F001 *SRC) A F195 R COLHDG('GM') REFFLD(F001 *SRC) A F196 R COLHDG('GN') REFFLD(F001 *SRC) A F197 R COLHDG('GO') REFFLD(F001 *SRC) A F198 R COLHDG('GP') REFFLD(F001 *SRC) A F199 R COLHDG('GQ') REFFLD(F001 *SRC) A F200 R COLHDG('GR') REFFLD(F001 *SRC) A F201 R COLHDG('GS') REFFLD(F001 *SRC) A F202 R COLHDG('GT') REFFLD(F001 *SRC) A F203 R COLHDG('GU') REFFLD(F001 *SRC) A F204 R COLHDG('GV') REFFLD(F001 *SRC) A F205 R COLHDG('GW') REFFLD(F001 *SRC) A F206 R COLHDG('GX') REFFLD(F001 *SRC) A F207 R COLHDG('GY') REFFLD(F001 *SRC) A F208 R COLHDG('GZ') REFFLD(F001 *SRC) A F209 R COLHDG('HA') REFFLD(F001 *SRC) A F210 R COLHDG('HB') REFFLD(F001 *SRC) A F211 R COLHDG('HC') REFFLD(F001 *SRC) A F212 R COLHDG('HD') REFFLD(F001 *SRC) A F213 R COLHDG('HE') REFFLD(F001 *SRC) A F214 R COLHDG('HF') REFFLD(F001 *SRC) A F215 R COLHDG('HG') REFFLD(F001 *SRC) A F216 R COLHDG('HH') REFFLD(F001 *SRC) A F217 R COLHDG('HI') REFFLD(F001 *SRC) A F218 R COLHDG('HJ') REFFLD(F001 *SRC) A F219 R COLHDG('HK') REFFLD(F001 *SRC) A F220 R COLHDG('HL') REFFLD(F001 *SRC) A F221 R COLHDG('HM') REFFLD(F001 *SRC) A F222 R COLHDG('HN') REFFLD(F001 *SRC) A F223 R COLHDG('HO') REFFLD(F001 *SRC) A F224 R COLHDG('HP') REFFLD(F001 *SRC) A F225 R COLHDG('HQ') REFFLD(F001 *SRC) A F226 R COLHDG('HR') REFFLD(F001 *SRC) A F227 R COLHDG('HS') REFFLD(F001 *SRC) A F228 R COLHDG('HT') REFFLD(F001 *SRC) A F229 R COLHDG('HU') REFFLD(F001 *SRC) A F230 R COLHDG('HV') REFFLD(F001 *SRC) A F231 R COLHDG('HW') REFFLD(F001 *SRC) A F232 R COLHDG('HX') REFFLD(F001 *SRC) A F233 R COLHDG('HY') REFFLD(F001 *SRC) A F234 R COLHDG('HZ') REFFLD(F001 *SRC) A F235 R COLHDG('IA') REFFLD(F001 *SRC) A F236 R COLHDG('IB') REFFLD(F001 *SRC) A F237 R COLHDG('IC') REFFLD(F001 *SRC) A F238 R COLHDG('ID') REFFLD(F001 *SRC) A F239 R COLHDG('IE') REFFLD(F001 *SRC) A F240 R COLHDG('IF') REFFLD(F001 *SRC) A F241 R COLHDG('IG') REFFLD(F001 *SRC) A F242 R COLHDG('IH') REFFLD(F001 *SRC) A F243 R COLHDG('II') REFFLD(F001 *SRC) A F244 R COLHDG('IJ') REFFLD(F001 *SRC) A F245 R COLHDG('IK') REFFLD(F001 *SRC) A F246 R COLHDG('IL') REFFLD(F001 *SRC) A F247 R COLHDG('IM') REFFLD(F001 *SRC) A F248 R COLHDG('IN') REFFLD(F001 *SRC) A F249 R COLHDG('IO') REFFLD(F001 *SRC) A F250 R COLHDG('IP') REFFLD(F001 *SRC) A F251 R COLHDG('IQ') REFFLD(F001 *SRC) A F252 R COLHDG('IR') REFFLD(F001 *SRC) A F253 R COLHDG('IS') REFFLD(F001 *SRC) A F254 R COLHDG('IT') REFFLD(F001 *SRC) A F255 R COLHDG('IU') REFFLD(F001 *SRC) A F256 R COLHDG('IV') REFFLD(F001 *SRC) //ENDSRC /*----------------------------------------------------------------------------*/ //DATA FILE(JFROMCSV2) FILETYPE(*SRC) ENDCHAR('//ENDSRC') A R RCD TEXT('Ricevitore generico per CSV') A F001 200 COLHDG('A ') A F002 R COLHDG('B ') REFFLD(F001 *SRC) A F003 R COLHDG('C ') REFFLD(F001 *SRC) A F004 R COLHDG('D ') REFFLD(F001 *SRC) A F005 R COLHDG('E ') REFFLD(F001 *SRC) A F006 R COLHDG('F ') REFFLD(F001 *SRC) A F007 R COLHDG('G ') REFFLD(F001 *SRC) A F008 R COLHDG('H ') REFFLD(F001 *SRC) A F009 R COLHDG('I ') REFFLD(F001 *SRC) A F010 R COLHDG('J ') REFFLD(F001 *SRC) A F011 R COLHDG('K ') REFFLD(F001 *SRC) A F012 R COLHDG('L ') REFFLD(F001 *SRC) A F013 R COLHDG('M ') REFFLD(F001 *SRC) A F014 R COLHDG('N ') REFFLD(F001 *SRC) A F015 R COLHDG('O ') REFFLD(F001 *SRC) A F016 R COLHDG('P ') REFFLD(F001 *SRC) A F017 R COLHDG('Q ') REFFLD(F001 *SRC) A F018 R COLHDG('R ') REFFLD(F001 *SRC) A F019 R COLHDG('S ') REFFLD(F001 *SRC) A F020 R COLHDG('T ') REFFLD(F001 *SRC) A F021 R COLHDG('U ') REFFLD(F001 *SRC) A F022 R COLHDG('V ') REFFLD(F001 *SRC) A F023 R COLHDG('W ') REFFLD(F001 *SRC) A F024 R COLHDG('X ') REFFLD(F001 *SRC) A F025 R COLHDG('Y ') REFFLD(F001 *SRC) A F026 R COLHDG('Z ') REFFLD(F001 *SRC) A F027 R COLHDG('AA') REFFLD(F001 *SRC) A F028 R COLHDG('AB') REFFLD(F001 *SRC) A F029 R COLHDG('AC') REFFLD(F001 *SRC) A F030 R COLHDG('AD') REFFLD(F001 *SRC) A F031 R COLHDG('AE') REFFLD(F001 *SRC) A F032 R COLHDG('AF') REFFLD(F001 *SRC) A F033 R COLHDG('AG') REFFLD(F001 *SRC) A F034 R COLHDG('AH') REFFLD(F001 *SRC) A F035 R COLHDG('AI') REFFLD(F001 *SRC) A F036 R COLHDG('AJ') REFFLD(F001 *SRC) A F037 R COLHDG('AK') REFFLD(F001 *SRC) A F038 R COLHDG('AL') REFFLD(F001 *SRC) A F039 R COLHDG('AM') REFFLD(F001 *SRC) A F040 R COLHDG('AN') REFFLD(F001 *SRC) A F041 R COLHDG('AO') REFFLD(F001 *SRC) A F042 R COLHDG('AP') REFFLD(F001 *SRC) A F043 R COLHDG('AQ') REFFLD(F001 *SRC) A F044 R COLHDG('AR') REFFLD(F001 *SRC) A F045 R COLHDG('AS') REFFLD(F001 *SRC) A F046 R COLHDG('AT') REFFLD(F001 *SRC) A F047 R COLHDG('AU') REFFLD(F001 *SRC) A F048 R COLHDG('AV') REFFLD(F001 *SRC) A F049 R COLHDG('AW') REFFLD(F001 *SRC) A F050 R COLHDG('AX') REFFLD(F001 *SRC) A F051 R COLHDG('AY') REFFLD(F001 *SRC) A F052 R COLHDG('AZ') REFFLD(F001 *SRC) A F053 R COLHDG('BA') REFFLD(F001 *SRC) A F054 R COLHDG('BB') REFFLD(F001 *SRC) A F055 R COLHDG('BC') REFFLD(F001 *SRC) A F056 R COLHDG('BD') REFFLD(F001 *SRC) A F057 R COLHDG('BE') REFFLD(F001 *SRC) A F058 R COLHDG('BF') REFFLD(F001 *SRC) A F059 R COLHDG('BG') REFFLD(F001 *SRC) A F060 R COLHDG('BH') REFFLD(F001 *SRC) A F061 R COLHDG('BI') REFFLD(F001 *SRC) A F062 R COLHDG('BJ') REFFLD(F001 *SRC) A F063 R COLHDG('BK') REFFLD(F001 *SRC) A F064 R COLHDG('BL') REFFLD(F001 *SRC) A F065 R COLHDG('BM') REFFLD(F001 *SRC) A F066 R COLHDG('BN') REFFLD(F001 *SRC) A F067 R COLHDG('BO') REFFLD(F001 *SRC) A F068 R COLHDG('BP') REFFLD(F001 *SRC) A F069 R COLHDG('BQ') REFFLD(F001 *SRC) A F070 R COLHDG('BR') REFFLD(F001 *SRC) A F071 R COLHDG('BS') REFFLD(F001 *SRC) A F072 R COLHDG('BT') REFFLD(F001 *SRC) A F073 R COLHDG('BU') REFFLD(F001 *SRC) A F074 R COLHDG('BV') REFFLD(F001 *SRC) A F075 R COLHDG('BW') REFFLD(F001 *SRC) A F076 R COLHDG('BX') REFFLD(F001 *SRC) A F077 R COLHDG('BY') REFFLD(F001 *SRC) A F078 R COLHDG('BZ') REFFLD(F001 *SRC) A F079 R COLHDG('CA') REFFLD(F001 *SRC) A F080 R COLHDG('CB') REFFLD(F001 *SRC) A F081 R COLHDG('CC') REFFLD(F001 *SRC) A F082 R COLHDG('CD') REFFLD(F001 *SRC) A F083 R COLHDG('CE') REFFLD(F001 *SRC) A F084 R COLHDG('CF') REFFLD(F001 *SRC) A F085 R COLHDG('CG') REFFLD(F001 *SRC) A F086 R COLHDG('CH') REFFLD(F001 *SRC) A F087 R COLHDG('CI') REFFLD(F001 *SRC) A F088 R COLHDG('CJ') REFFLD(F001 *SRC) A F089 R COLHDG('CK') REFFLD(F001 *SRC) A F090 R COLHDG('CL') REFFLD(F001 *SRC) A F091 R COLHDG('CM') REFFLD(F001 *SRC) A F092 R COLHDG('CN') REFFLD(F001 *SRC) A F093 R COLHDG('CO') REFFLD(F001 *SRC) A F094 R COLHDG('CP') REFFLD(F001 *SRC) A F095 R COLHDG('CQ') REFFLD(F001 *SRC) A F096 R COLHDG('CR') REFFLD(F001 *SRC) A F097 R COLHDG('CS') REFFLD(F001 *SRC) A F098 R COLHDG('CT') REFFLD(F001 *SRC) A F099 R COLHDG('CU') REFFLD(F001 *SRC) A F100 R COLHDG('CV') REFFLD(F001 *SRC) A F101 R COLHDG('CW') REFFLD(F001 *SRC) A F102 R COLHDG('CX') REFFLD(F001 *SRC) A F103 R COLHDG('CY') REFFLD(F001 *SRC) A F104 R COLHDG('CZ') REFFLD(F001 *SRC) A F105 R COLHDG('DA') REFFLD(F001 *SRC) A F106 R COLHDG('DB') REFFLD(F001 *SRC) A F107 R COLHDG('DC') REFFLD(F001 *SRC) A F108 R COLHDG('DD') REFFLD(F001 *SRC) A F109 R COLHDG('DE') REFFLD(F001 *SRC) A F110 R COLHDG('DF') REFFLD(F001 *SRC) A F111 R COLHDG('DG') REFFLD(F001 *SRC) A F112 R COLHDG('DH') REFFLD(F001 *SRC) A F113 R COLHDG('DI') REFFLD(F001 *SRC) A F114 R COLHDG('DJ') REFFLD(F001 *SRC) A F115 R COLHDG('DK') REFFLD(F001 *SRC) A F116 R COLHDG('DL') REFFLD(F001 *SRC) A F117 R COLHDG('DM') REFFLD(F001 *SRC) A F118 R COLHDG('DN') REFFLD(F001 *SRC) A F119 R COLHDG('DO') REFFLD(F001 *SRC) A F120 R COLHDG('DP') REFFLD(F001 *SRC) A F121 R COLHDG('DQ') REFFLD(F001 *SRC) A F122 R COLHDG('DR') REFFLD(F001 *SRC) A F123 R COLHDG('DS') REFFLD(F001 *SRC) A F124 R COLHDG('DT') REFFLD(F001 *SRC) A F125 R COLHDG('DU') REFFLD(F001 *SRC) A F126 R COLHDG('DV') REFFLD(F001 *SRC) A F127 R COLHDG('DW') REFFLD(F001 *SRC) A F128 R COLHDG('DX') REFFLD(F001 *SRC) A F129 R COLHDG('DY') REFFLD(F001 *SRC) A F130 R COLHDG('DZ') REFFLD(F001 *SRC) A F131 R COLHDG('EA') REFFLD(F001 *SRC) A F132 R COLHDG('EB') REFFLD(F001 *SRC) A F133 R COLHDG('EC') REFFLD(F001 *SRC) A F134 R COLHDG('ED') REFFLD(F001 *SRC) A F135 R COLHDG('EE') REFFLD(F001 *SRC) A F136 R COLHDG('EF') REFFLD(F001 *SRC) A F137 R COLHDG('EG') REFFLD(F001 *SRC) A F138 R COLHDG('EH') REFFLD(F001 *SRC) A F139 R COLHDG('EI') REFFLD(F001 *SRC) A F140 R COLHDG('EJ') REFFLD(F001 *SRC) A F141 R COLHDG('EK') REFFLD(F001 *SRC) A F142 R COLHDG('EL') REFFLD(F001 *SRC) A F143 R COLHDG('EM') REFFLD(F001 *SRC) A F144 R COLHDG('EN') REFFLD(F001 *SRC) A F145 R COLHDG('EO') REFFLD(F001 *SRC) A F146 R COLHDG('EP') REFFLD(F001 *SRC) A F147 R COLHDG('EQ') REFFLD(F001 *SRC) A F148 R COLHDG('ER') REFFLD(F001 *SRC) A F149 R COLHDG('ES') REFFLD(F001 *SRC) A F150 R COLHDG('ET') REFFLD(F001 *SRC) A F151 R COLHDG('EU') REFFLD(F001 *SRC) A F152 R COLHDG('EV') REFFLD(F001 *SRC) A F153 R COLHDG('EW') REFFLD(F001 *SRC) A F154 R COLHDG('EX') REFFLD(F001 *SRC) A F155 R COLHDG('EY') REFFLD(F001 *SRC) A F156 R COLHDG('EZ') REFFLD(F001 *SRC) A F157 R COLHDG('FA') REFFLD(F001 *SRC) A F158 R COLHDG('FB') REFFLD(F001 *SRC) A F159 R COLHDG('FC') REFFLD(F001 *SRC) A F160 R COLHDG('FD') REFFLD(F001 *SRC) A F161 R COLHDG('FE') REFFLD(F001 *SRC) A F162 R COLHDG('FF') REFFLD(F001 *SRC) A F163 R COLHDG('FG') REFFLD(F001 *SRC) //ENDSRC //ENDBCHJOB