Subcadenas.
Especial interés tiene el acceso a subcadenas o partes de una cadena para su procesamiento. Para ello OOo Basic provee de cuatro funciones Built-In, tres para el acceso propiamente dicho a subcadenas y una cuarta para la ubicación de la subcadena en la cadena. Analizaré estas funciones en esta entrada.
Como acabo de decir, para acceder a parte del string o cadena contamos con tres funciones: Left(), Right() y Mid() que, como sus nombres indican, nos permiten posicionarnos al inicio (extremo izquierdo), al final (extremo derecho) o en una posición intermedia de la cadena respectivamente (1).
Las dos primeras funciones (Left() y Right()) reciben dos parámetros: la cadena de referencia (String) y número de caracteres a devolver, Left() desde la posición inicial y Right() desde la final.
La función (Mid()), como es de esperar, requiere tres parámetros: la cadena en la que buscar (String), la posición de partida de la búsqueda y el número de caracteres a devolver (ambos Integer). Veámos su sintaxis y funcionamiento en la práctica dada la variable sCad1 = "Califragilistico":
- vSubCad1 = Left (Cad1, 4) devuelve Cali
- vSubCad1 = Right (Cad1, 4) devuelve tico
- y vSubCad1 = Mid (Cad1, 3, 4) devuelve lifr (2)
La función complementaria de las anteriores es la función InStr() (3). Esta función requiere dos parámetros, ambos de tipo string, y devuelve un valor numérico (Integer). El primero de los parámetros es la cadena (o variable) sobre la que queremos trabajar y el segundo, la subcadena que buscamos (que también podemos asignar a una variable, por ejemplo sParte). El valor numérico que nos devuelve, en caso de que efectivamente la subcadena forme parte de la cadena, es la posición que ocupa el primer elemento de la subcadena buscada en la cadena de referencia. En caso de no encontrar dicha subcadena, InStr() devuelve 0 (4).
Igual que antes, un ejemplo de sintaxis y resultado: sobre la variable anterior (sCad1 = "Califragilistico") queremos saber si contiene la subcadena fragil (sParte = "fragil"), con lo que formulamos la función como sigue, siendo sResultaBusca una variable de tipo Integer a la que asignamos el resultado de la función:
sResultaBusca = InStr (sCad1, sParte)
Si formulamos MsgBox sResultaBusca obtendremos como resultado 5, que es la posición en la que se inicia la presencia de la subcadena sParte. En caso de que la subcadena que buscamos no se encuentre en la cadena-base, como ya dije, InStr() nos devolverá 0
Una limitación relevante de InStr() es que únicamente devuelve la primera aparición de la subcadena buscada, no todas las posibles. Así, por ejemplo, si la subcadena a buscar fuera li (que está presente dos veces en "Califragilistico"), la respuesta será 3, que es la posición inicial (de la letra l) de la primera aparición de la subcadena, pero no dice nada de la segunda aparición de dicha subcadena (5).
Existe una forma de sortear esta dificultad, aunque no resulta del todo satisfactoria, ya que exige para su aprovechamiento, elaborar una función propia, pero al menos posibilita esta solución: consiste en añadir un nuevo parámetro a la función, posicionado al inicio de su declaración: este parámetro (que es de tipo numérico) indica la posición a partir de la cual iniciar la búsqueda. Su sintaxis es la siguiente: sResultaBusca = InStr (iPos, sCad1, sParte), siendo iPos una variable que contiene un valor numérico (6).
Siguiendo con el ejemplo anterior, si formulamos sResultaBusca = InStr ( iPos, sCad1, sParte), para iPos = 4, obtendremos como resultado 10, que es la posición en la que se ubica la letra l en la aparición de la subcadena li dentro de la cadena "Califragilistico".
NOTAS
(1) Y de ahí sus nombres en inglés, evidentemente: Left(), Right() y Mid().
(2). IMPORTANTE: obsérvese que el punto de partida es la posición 3, esto es: la tercera letra empezando por la izquierda (la l) y no la cuarta (la i) como sería de esperar según la forma ordinaria en la que OOo Basic posiciona los elementos de su conjuntos de datos, identificando el primer elemento con la posición 0. La función Mid() es, en esto, una excepción, aunque no la única. Además, este punto de inicio está incluido en la subcadena que devuelve Mid(), esto es, no empieza a contar a partir de él, de ahí que la subcadena devuelta sea lifr.
(3) Se puede traducir por EnLaCadena, en evidente referencia a su función.
(4) Como veremos más adelante en la entrada, InStr() también puede recibir un tercer parámetro. En este caso también se cumple el criterio indicado en 2 (el conteo empieza en 1, no en posición 0), por lo que el valor 0 que devuelve InStr() lo que nos indica es que la subcadena NO forma parte de la cadena. Téngase en cuenta que es suficiente con que un elemento de la subcadena buscada sea diferente (uno sólo, y no necesariamente el primero) para que la respuesta sea 0.
(5) Esto hace que InStr() resulte de utilidad limitada en búsquedas de cierta complejidad.
No hay comentarios:
Publicar un comentario
Comenta esta entrada