mercoledì 5 agosto 2015

Qualche trucco con le DS #2

Ieri vi ho raccontato cosa sono le DS qualificate, lasciandovi con la promessa di un altro trucchetto divertente. Siccome sono una persona di parola, eccomi qui :-)

Riprendiamo l'esempio con le due DS dell'esempio di ieri:

DDataGMA           DS               Qualified
D Giorno                       2S 0
D Mese                         2S 0

D Anno                         4S 0
DDataAMG           DS               Qualified
D Anno                         4S 0
D Mese                         2S 0

D Giorno                       2S 0


Essendo entrambe qualificate, i nomi dei campi possono essere duplicati.
Vi avevo anche messo un semplice esempio di come possono essere utilizzati: rivediamolo.

//free
    DataAMG = DataDaInvertire;
    DataGMA.Anno = DataAMG.Anno;
    DataGMA.Mese = DataAMG.Mese;
    DataGMA.Giorno = DataAMG.Giorno;
    DataInvertita = DataGMA;
//end-free


Ma qui scatta il giochino interessante.
Nel linguaggio COBOL esiste un codice operativo chiamato MOVE CORR che sposta tra due strutture dati i campi che hanno lo stesso nome. Cominciate a intravedere la possibilità?
Bene, nel linguaggio RPG non esisteva un codice operativo simile, fino a quando non è arrivato l'ILE. Grazie al codice EVAL-CORR diventa possibile scrivere l'istruzione sopra in un modo ancora più semplice:


//free
    DataAMG = DataDaInvertire;
    Eval-corr DataGMA = DataAMG;
    DataInvertita = DataGMA;
//end-free

Non male, vero?
Il fatto è che, a differenza di uno spostamento tra due DS generiche, questo comando permette di spostare SOLO i campi che esistono in entrambe le DS: se ci sono delle differenze, i campi o non vengono spostati perché mancanti nella DS di arrivo, oppure rimangono vuoti per ché mancanti nella DS di partenza.
Occorre prestare attenzione ai campi presenti nella DS di arrivo e non in quella di partenza, perché in quel caso vengono inizializzati a "NULL", valore che potrebbe non essere voluto. Eventualmente potete far precedere il EVAL-CORR da un RESET della DS.

Qui ho usato la codifica in formato free, ma si può usare anche con la solita forma a tracciato fisso.

Provateci e divertitevi :-)

Nessun commento: