-----Mensaje original-----
De: [EMAIL PROTECTED] [SMTP:[EMAIL PROTECTED] En nombre de Jaime Villa Torres
Enviado el: lunes, 07 de agosto de 2006 8:28
Para: [email protected]
Asunto: Variables Varying
Señores, algo curioso, tengo lo siguiente.
d TramaXml s 32767 Varying
d TramaXmlS s Like(TramaXml) inz
Cuando se recibe la TramaXml tiene una longitud de 5842
Se lee la TramaXml, de acuerdo a las necesidades se agregan algunos valores, pero esto se realiza en la TramaXmlS, esta termina con una longitud de 6206
luego se realiza la siguiente operación
c Eval %subst(TramaXml:3) = %trim(TramaXmlS) +
c '</SERS>' +
c '</PV>' +
c '</DOMI>'
Cuando se mira el valor de la TramaXml, tiene el valor de la TramaXmlS, pero únicamente hasta la posición que llego inicialmente, o sea hasta 5842, de ahí hasta los 6206 esta vacia...
¿Por qué no empleas este otro método? Por probar,
Eval %subst(TramaXml:1:%len(TramaXmlS)) = %trim(TramaXmlS) + ...
Te recuerdo que cuando se emplea VARYING, lo que se le está indicando al compilador es que la variable es de longitud variable. La longitud se guarda en la misma variable, pero es totalmente transparente al RPG. Por tanto no es correcto hacer
%subst(TramaXml:3)
a no ser que quieras empezar en la posición 3 de la cadena. Y tampoco es necesario
%trim(TramaXmlS)
porque la variable ya es VARYING gracias a la palabra clave Like(...).
Si hay consejos de cambiar el atributo Varying, imposible, esto llega desde un socket.
Alguna sugerencia al respecto.
Espero que te sirva de alguna ayuda.
Un saludo,
Javier Mora
Dpto. Informática
Dialsur S.A.U.
