|
A menudo necesitamos procesar valores que hemos obtenido
de otras aplicaciones que están separados por
comas o otro carácter. Este proceso puede ser
laborioso.
Con la función @Fetch, el proceso es muy facil.
Colocaremos los valores significativos en una array
para procesarlos después.
@Fetch Poner en una array valores separados por coma
de una cadena.
Formato: Eval Array = @Fetch('one, two, three, four')
o Eval Array = @Fetch('one*two*three*four':*Off:'*')
Si deseamos la marca %%%EOF%%% como último elemento
procesado, pondremos el segundo parámetro a *On
Si los valores están separado por un caracter
diferente de coma, pondremos dicho caracter en el tercer
parámetro.
Para utilizar esta función, copiaremos el prototipo
con el comando /COPY y definiremos una array:
Nosotros tenemos la variable ftTXT2 con el valor 1,3,,5,7
c Eval ac_Deduc = @Fetch(ftTXT2:*On)
Después de ese paso de programa, la array ac_Deduc
tiene estos valores:
(1) -> '1'
(2) -> '3'
(3) -> ''
(4) -> '5'
(5) -> '7'
(6) -> '%%%EOF%%%'
(7..100) -> ''
Hemos indicado el segundo parámetro a *On porque
queremos conocer cual es el final de los valores, para
diferenciar el valor en blanco de la posición
3 del resto de blancos de la array a partir de 7.
No olvidar enlazar el modulo @.FETCH cuando creemos
el *PGM con el mandato
CRTPGM
Código
El prototipo @P.FETCH:
d*
d* Coloquem una cadena separa per comes en una array
d @Fetch PR 250a Dim(100)
d p_Valor 24850a Value
d p_EOF n Value Options(*NOPASS)
d p_Separador 1a Value Options(*NOPASS)
El módulo @.FETCH:
h* h* h* h* @Fetch Fetch in a array the comma separated values of h* a string. h* Format: Eval Array = @Fetch('one,two,three,four') h* or Eval Array = @Fetch('one*two*three*four':*Off:'*') h* If you want a %%%EOF%%% mark, set the second parm h* to *On h* If you want to sepparate the values with a char h* different like a comma, put it in the threeth parm. h* h* h* @Fetch Coloquem el valor d'una cadena separada per comes h* en una array. h* Format: Eval Array = @Fetch('u,dos,tres,quatre') h* o Eval Array = @Fetch('u*dos*tres*quatre':*Off:'*') h* Si vols una marca %%%EOF%%%, posa a *On el segon h* parametre. h* Si vols separar els valors amb un altre caracter h* diferent de la coma, coloca'l com a tercer parametre. h NoMain h Option(*NODEBUGIO : *SRCSTMT) h DATFMT(*EUR) h* d* d* Definicio del procediment (prototip) d/COPY utlpgmsrc,@p.fetch d* p*--------------------------------------------------- p* Col*loquem una cadena a un Array indicant un p* separador d'elements. p*--------------------------------------------------- p @Fetch B Export d @Fetch PI 250a Dim(100) d p_Valor 24850a Value d p_EOF n Value Options(*NOPASS) d p_Separador 1a Value Options(*NOPASS) d* d j_Return s 250a Dim(100) d j_p s 3p 0 d j_pV s 5p 0 d j_pV2 s 5p 0 d j_EOF s n Inz(*Off) d j_Separador s 1a Inz(',') /Free // Natejem el resultat final i determinem quin es el separador Clear j_Return; If %Parms >= 2; j_EOF = p_EOF; EndIf; If %Parms = 3; j_Separador = p_Separador; EndIf; // Iniciem el bucle per recuperar els 99 possibles valors j_pV2 = 1; For j_p = 1 to 99; // Si cerquem mes enlla de la llargaria de la cadena, sortim If j_pV2 > %len(%trim(p_Valor)); Leave; EndIf; j_pV = %Scan(j_Separador:%trim(p_Valor):j_pV2); // Recuperem la possicio del seguent separador If j_pV = 0; // Si no trobem res, processem el darrer i sortim del bucle j_pv = %len(%trim(p_Valor))+1; j_Return(j_p) = %Trim(%Subst(p_valor:(j_pV2):(j_pV-j_pV2)));
Leave; EndIf; If j_pV = j_pV2; // Si no hi habien espais entre dues comes j_pV2 = j_pV + 1; Iter; EndIf; // Li passem el valor a l'array i resituem el punter // de recerca. j_Return(j_p) = %Trim(%Subst(p_valor:(j_pV2):(j_pV-j_pV2))); j_pV2 = j_pV + 1; EndFor; // Si han indicat que volen marca EOF, li coloquem If j_EOF; j_Return(j_P+1) = '%%%EOF%%%'; EndIf; // Retornem l'array recomposada Return j_Return; /End-Free c* p @Fetch E
Si la función os parece interesante, la podeis puntuar
en:
http://search400.techtarget.com/tip/
Documento realizado por Àlex
Corretge
14-12-2002

|