En este ejemplo vamos a ver el funcionamiento de algunas funciones de Genexus para el manejo de cadenas de caracteres. Lo que a continuación se detalla como ejemplo puede utilizarse tanto en Web Panel, Procedure, etc.
Supongamos que queremos extraer de una cadena de caracteres; (que puede ser el dato de un campo en una tabla o una línea de texto); una sub cadena pero a partir de una posición especifica. Para ello vamos a necesitar una variable de tipo numérica, la cadena de caracteres y la función "StrSearch()" (http://library.gxtechnical.com/gxdlsp/pub/GeneXus/DevEnv/Docum/ReleaseNotes/7.5/FuncionStrSearch.htm).
Variables:
&Posicion: Numérico
&Cadena: Alfanumérico (que puede estar basada en el Campos de una Tabla o no)
'(': Es la ocurrencia o caracter a buscar dentro de la variable &Cadena.
Le damos un valor, (constante), a la variable "Cadena" para que se pueda apreciar mejor el ejemplo, podríamos llenarla a partir del valor de un campo o registro de una tabla también, pero para este caso:
&Cadena = 'Frase a leer (sub cadena)' // 25 caracteres
Entonces vamos a obtener la posición dentro de una cadena o string:
&Posicion = StrSearch(&Cadena, '(') // retorna un valor numérico
... esto no da como resultado &Posición = 14, que es el valor inicial para leer u obtener una Sub Cadena de la siguiente manera:
Variables:
&LargoCadena: Numérico obtenemos la cantidad de caracteres de la variable "&Cadena"
&LargoSubCadena: Numérico obtenemos la cantidad de caracteres a partir del valor retornado por "&Posicion"
&LargoCadena = &Cadena.Length()
&LargoSubCadena = (&Cadena.Length() - (&Posicion - 1))
...o sea hacemos una pequeña cuenta para obtener en este caso, el largo de la sub cadena quedando con el valor 12.
Ahora vamos a proceder a definir una variable más donde guardaremos la sub cadena resultante, para ello utilizaremos la Función o Método "Substring()" (https://wiki.genexus.com/commwiki/servlet/wiki?12713,Substring+method); para este ejemplo utilizaremos el Método.
Variable:
&SubCadena: de tipo Alfanumérico del tamaño que definamos nosotros.
&SubCadena = Trim(&Cadena.Substring(&Posicion, &LargoSubCadena))
El valor entonces de la variable &SubCadena es "(sub cadena)".
Paso a mostrar el Código del ejemplo que lo utilicé en un Web Panel en el "Evento Start"
Quedando de la siguiente manera:
Event Start
&Cadena = 'Frase a leer (sub cadena)'
&Posicion = 0
&LargoCadena = 0
&LargoSubCadena = 0
&Posicion = StrSearch(&Cadena, '(')
if &Posicion > 0
&LargoCadena = &Cadena.Length()
&LargoSubCadena = (&LargoCadena - (&Posicion - 1))
&SubCadena = Trim(&Cadena.Substring(&Posicion, &LargoSubCadena))
endif
Endevent
Espero sirva el ejemplo, de seguro se puede hacer de otra forma, este es mi aporte. cualquier crítica es bien recibida mientras sea constructiva.
Saludos!