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:
Posta un commento