Combiner.CombineTextByPositions

La función Combiner.CombineTextByPositions devuelve una cadena de texto resultado de solapar otras cadenas de texto en las posiciones indicadas.

Sintaxis

Combiner.CombineTextByPositions(
    positions as list,
    optional template as nullable text
) as function

Parámetros
  • positions: posiciones en la cadena de texto a devolver en las que situar los textos a combinar
  • template: (opcional) parámetro no documentado
Información adicional

Esta función -terriblemente mal documentada- tiene el siguient comportamiento. Se aplica a un conjunto de textos y los va a solapar (en el orden en el que se encuentren los textos) en las posiciones indicadas.

Por ejemplo, supongamos que partimos de los textos "Marte" y "Júpiter" y las posiciones son 0 y 3: Esta función sitúa el texto "Marte" en la posición 0 (los textos se consideran de izquierda a derecha, igual que las posiciones) y el texto "Júpiter" en la posición 3, cubriendo los caracteres de "Marte" que queden en la posición 3 y posteriores. Es decir, el resultado sería "MarJúpiter".

Si la primera posición de la lista es mayor que 0, el texto resultante se rellena con espacios en blanco por la izquierda. Es decir, si en el caso anterior las posiciones fuesen 1 y 3, el texto resultante sería " MaJúpiter" (un espacio en blanco al principio, el texto "Marte" situado a partir de la posición 1 y el texto "Júpiter" situado a partir de la posición 3).

Algunos consideraciones adicionales:

  • Las posiciones deberán incluirse en la lista con orden creciente (una lista de posiciones como {3, 1} devolvería un error): cada texto deberá incluirse como mínimo en la misma posición que el texto anterior, nunca antes.
  • Cuando un texto es solapado por otro a partir de una cierta posición, se ignoran todos los caracteres de dicho texto a partir de esa posición, aun cuando el texto con el que estamos solapando sea corto (véase ejemplo más adelante).
  • El último texto siempre se incluye completo (pues no es solapado por ningún otro) salvo que haya más posiciones que textos (explicado a continuación)
  • Si el número de posiciones es menor que el número de textos, aquellos textos sin una posición asociada se ignoran
  • Si el número de posiciones es mayor que el número de textos, los textos inexistentes a los que corresponderían las posiciones quedan representados por una cadena de texto vacía (que se superpone a las anteriores de todas formas).
Ejemplos

En este ejemplo estamos combinando los textos "Marte", "Júpiter" y "Saturno" en las posiciones 1, 3 y 6. El resultado incluye un espacio en blanco a la izquierda, el texto "Marte" situado a partir de la posición 1, el texto "Júpiter" situado a partir de la posición 3 y el texto "Saturno" situado a partir de la posición 6.

let
    textos = {"Marte", "Júpiter", "Saturno"}
in
    Combiner.CombineTextByPositions(
    {1, 3, 6}
    )(textos)

" MaJúpSaturno"

Función M Combiner.CombineTextByPositions

Si estamos combinando dos textos, aunque el segundo sea muy corto, se ignoran todos los caracteres del primero a partir de la posición en la que se produce el solape:

let
    textos = {"texto-muy-largo", "_"}
in
    Combiner.CombineTextByPositions(
    {0, 3}
    )(textos)

tex_

Función M Combiner.CombineTextByPositions

Podríamos esperar que el resultado fuese "tex_o-muy-largo" (es decir, que se mantuviesen todos los caracteres del primer texto que no son cubiertos por el segundo texto), pero no es así.

Para ver el efecto de incluir más posiciones que textos, vamos a partir del siguiente ejemplo que considera tres textos ("Marte", "Júpiter" y "Saturno") y tres posiciones. El siguiente código devuelve una lista formada por el texto resultante de la combinación y por su longitud:

let
    textos = {"Marte", "Júpiter", "Saturno"},
    texto_combinado = Combiner.CombineTextByPositions(
        {0, 3, 5}
    )(textos),
    longitud_texto_combinado = Text.Length(
        texto_combinado
    )

in
    {texto_combinado, longitud_texto_combinado}

Función M Combiner.CombineTextByPositions

Si ahora añadimos una cuarta posición a la lista (la posición "6", por ejemplo) comprobamos que en la posición 5 se incluye la "S" de "Saturno" pero ahí termina el texto (pues, como podemos comprobar, tiene 6 caracteres). Es decir, este resultado es equivalente a una cadena de texto vacía situada en la posición 6:

let
    textos = {"Marte", "Júpiter", "Saturno"},
    texto_combinado = Combiner.CombineTextByPositions(
        {0, 3, 5, 6}
    )(textos),
    longitud_texto_combinado = Text.Length(
        texto_combinado
    )

in
    {texto_combinado, longitud_texto_combinado}

Función M Combiner.CombineTextByPositions
Categoría
Funciones de combinador
Enviado por admin el Mié, 12/08/2020 - 12:26