Combiner.CombineTextByRanges

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

Sintaxis

Combiner.CombineTextByRanges(
    ranges as list,
    optional template as nullable text
) as function

Parámetros
  • ranges: lista de rangos (rangos que, a su vez, son listas)
  • template: (opcional) parámetro no documentado
Información adicional

El comportamiento de esa función -prácticamente sin documentar en el sitio web de Microsoft- es el siguiente: el parámetro ranges es una lista de listas formadas por dos valores: una posición y un número de caracteres. La función se aplica a un conjunto de textos -teóricamente a cada texto le corresponde un rango-, va a extraer de cada uno de estos textos el número de caracteres indicados en el rango correspondiente, y va a solapar los fragmentos en las posiciones indicadas en los rangos.

Por ejemplo, supongamos que partimos de los textos "Marte" y "Júpiter" y los rangos (0, 2) y (4, 3). El primer rango indica posición 0 y longitud 2. Y el segundo, posición 4 y longitud 3. Esta función considera el primer rango (0, 2) correspondiente al texto "Marte" y sitúa los primeros 2 caracteres del texto ("Ma") en la posición 0 del texto a devolver (los textos se consideran de izquierda a derecha, igual que los rangos) y, tras evaluar el segundo rango y el segundo texto, va a situar los tres primeros caracteres del texto "Júpiter" en la posición 4, cubriendo los caracteres de "Marte" que pudiesen quedar en la posición 4 y posteriores (no es el caso pues solo estamos extrayendo 2 caracteres de "Marte" y no existe solape). Es decir, el resultado sería "Ma  Júp", incluyendo dos caracteres en blanco entre "Ma" y "Júp".

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 los rangos fuesen (1, 2) y (4, 3), el texto resultante sería " Ma  Júp" (un espacio en blanco al principio y otro entre "Ma" y "Júp").

Algunos consideraciones adicionales:

  • No es necesario que las posiciones indicadas en los rangos se incluyan en orden creciente.
  • Cuando un texto es solapado por otro a partir de una cierta posición, solo se sobrescriben los caracteres coincidentes (véase ejemplo más adelante).
  • 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 rangos es mayor que el número de textos, los rangos que no tengan un texto asociado se ignoran.
  • La longitud del texto devuelto es la mínima necesaria para acomodar a los fragmentos extraídos de los textos.
  • Si el número de caracteres a extraer de un texto es mayor que la longitud del texto, se devuelve el texto original.
Ejemplos

Veamos un ejemplo sencillo: queremos combinar los textos "Marte" y "Júpiter" extrayendo 2 caracteres del primero y 3 del segundo, y situar dichos fragmentos en las posiciones 0 y 4 del texto final. Es decir, los rangos a considerar son (0, 2) para "Marte" y (4, 3) para "Júpiter". El código a usar podría ser el siguiente (código en el que devolvemos tanto el texto resultante como su longitud):

let
    textos = {"Marte", "Júpiter"},
    texto_combinado = Combiner.CombineTextByRanges(
        {{0, 2}, {4, 3}}
    )(textos),
    longitud_texto_combinado = Text.Length(
        texto_combinado
    )

in
    {texto_combinado, longitud_texto_combinado}

Función M Combiner.CombineTextByRanges

El resultado final es una cadena de texto con la longitud necesaria para acomodar, en la posición 0, el fragmento "Ma" y en la posición 4, el fragmento "Júp". Es decir, el resultado es la cadena de texto de 7 caracteres "Ma  Júp", con dos espacios en blanco entre los dos fragmentos mencionados.

Los caracteres que no queden cubiertos por los de otros textos se siguen mostrando:

let
    textos = {"elefante", "_"},
    texto_combinado = Combiner.CombineTextByRanges(
        {{0, 99}, {4, 1}}
    )(textos)
in
    texto_combinado

elef_nte

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