¿ Quieres imprimir esta página ? Volver a la página principal de Recursos iSeries AS400 ¿ Necesitas ayuda ? En pruebas
System i5 iSeries AS400 Recursos. Compartiendo generamos conocimiento
Novedades en Recursos iSeries AS400
Noticias tecnológicas
Documentos
Poner valores en un array

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

Comentarios de usuarios

Nombre:
Mail:
Comentario:
 
Subir a la parte superior de la web
 

 

NUESTRA COMUNIDAD EN
ÚNETE Y.... ¡¡ PARTICIPA !!
Dossiers técnicos iSeries y AS400
- Seguridad
- Alta disponibilidad.
Nuestros links favoritos
- Tendencias tecnologías de la información
Expertos en tecnologías de la información, nos dan su punto de vista sobre las tendencias actuales y futuras
- Los últimos anuncios sobre hardware-software para iSeries AS400 realizados por IBM
- Freeware y shareware para el iSeries AS400
- Utilidades para el iSeries AS400 realizadas por profesionales
- Documentos. Trucos e ideas para resolver tus problemas
- Los manuales y links más interesantes del iSeries AS400

  Links patrocinados
  •  
  •  

[ Soy nuevo |   Profesionales |   AS qué |   Empresas |    Foros |   Recomiéndanos |    Productos ]
 
Recursos iSeries AS400. Es una web de: PUBLICACIONES HELP400, S.L. CIF:B-60-202827 Gran Vía de les Corts Catalanes, núm. 715, Entresuelo – 3ª - Barcelona - Tel.+34.932.310.049