Extracción de las iniciales de un texto

El objetivo de este escenario es crear una función de consulta que reciba un texto de entrada y devuelva otro texto formado por las iniciales de las palabras que formaban el texto de entrada (suponiendo que éstas están separadas por un espacio en blanco).

Lo primero que tenemos que hacer es dividir el texto que reciba la función en palabras y almacenarlas en forma de lista. La función Text.ToList no es -a pesar de lo que su nombre pueda hacernos pensar- la opción correcta, pues esta función devuelve una lista formada por todos los caracteres del texto que se le pasa como argumento.

Por el contrario, es la función Text.Split la que nos permite dividir un texto en palabras pudiendo especificar el separador entre ellas. Para probar esta función vamos a crear una nueva consulta en blanco con el siguiente código:

let
    text = "Microsoft Power BI Desktop",
    words = Text.Split(text, " ")
in
    words

El resultado es el siguiente:

Text.Split

Efectivamente, este resultado es el que esperábamos.

Ahora viene el proceso más complejo: Queremos recorrer la lista de palabras extrayendo el primer carácter (lo que vamos a conseguir con la función Text.Start) y acumulando estos caracteres en un único texto. Este comportamiento es el que ofrece la función List.Accumulate. Probémosla en la Consulta1 anterior modificando su código:

let
    text = "Microsoft Power BI Desktop",
    words = Text.Split(text, " "),
    acronym = List.Accumulate(
        words,
        "",
        (acronym, word) => acronym & Text.Start(word, 1)
    )
in
    acronym

El primer argumento de List.Accumulate es la lista a recorrer. El segundo es el primer valor del que partir. En nuestro caso queremos ir acumulando las primeras letras, pero la primera letra queremos añadirla a una cadena de texto vacía, de ahí el valor "" usado. El tercer argumento es la función acumulativa a usar: la nuestra va a recibir el resultado que se haya acumulado hasta el momento (argumento acronym) y la nueva palabra (argumento word) y va a devolver la concatenación del acumulado y la primera letra de la nueva palabra. Este resultado es el que se considerará como "acumulado" en la siguiente iteración.

Por último, para convertir nuestra consulta en una función de consulta, no tenemos más que añadir la cabecera correcta y eliminar la primera fórmula de paso en la que inicializábamos la variable text:

(text as text) as text =>
    let
        words = Text.Split(text, " "),
        acronym = List.Accumulate(
            words,
            "",
            (acronym, word) => acronym & Text.Start(word, 1)
        )
    in
        acronym

Podemos dar a la función un nombre adecuado (acronym, por ejemplo) e invocarla para confirmar que devuelve el resultado que queríamos:

 

Submitted by admin on Tue, 01/31/2023 - 19:28