6 febrero, 2025

FUNCIÓN PARA REEMPLAZAR ELEMENTOS DE UNA CADENA DE TEXTO DELIMITADA CON CARÁCTERES

Hola a todos!!

Hace unos días veía un post de YouTube en el canal de Sergio Alejandro Campos en el que se daba una solución al siguiente problema (en el enlace lo podéis ver), se trata de la importación de archivos txt con datos de fechas con el siguiente formato:

FECHAS
01-ene-22
12-feb-22
23-dic-22

El problema es que algunas de esas fechas en el momento de importar los datos al editor de Power Query y transformarlos en formato de fecha, no las detecta como tal y se muestra un error debido a que el formato detectado es texto.

En el video se muestra una solución totalmente válida. Pero en este caso os mostraré otra forma de solucionarlo pero con una función en lenguaje M.

En realidad lo que sucede es que las fechas que realmente van a arrojar un error son aquellas en las que la abreviatura de ingles en distinta a la de castellano, es decir los meses de: enero, abril, agosto y diciembre. Pero igualmente utilizaremos la función para aplicarla a todos los meses, os mostraré dos formas, una que es reemplazando el texto de la abreviatura en castellano por inglés (en rojo son los meses cuya abreviatura es distinta en inglés):

(MiSeleccion as text) =>
let
    nMes = 
		{
		{"ene","-jan-"},
		{"feb","-feb-"},
		{"mar","-mar-"},
		{"abr","-apr-"},
		{"may","-may-"},
		{"jun","-jun-"},
		{"jul","-jul-"},
		{"ago","-aug-"},
		{"sep","-sep-"},
		{"oct","-oct-"},
		{"nov","-nov-"},
		{"dic","-dec-"}
		}
in
    Text.Combine(List.ReplaceMatchingItems(Text.Split(MiSeleccion,"-"), nMes))

Y la otra función es sustituyendo la abreviatura en castellano por el número de mes:

(MiSeleccion as text) =>
let
    nMes = 
		{
		{"ene","-01-"},
		{"feb","-02-"},
		{"mar","-03-"},
		{"abr","-04-"},
		{"may","-05-"},
		{"jun","-06-"},
		{"jul","-07-"},
		{"ago","-08-"},
		{"sep","-09-"},
		{"oct","-10-"},
		{"nov","-11-"},
		{"dic","-12-"}
		}
in
    Text.Combine(List.ReplaceMatchingItems(Text.Split(MiSeleccion,"-"), nMes))

Esta es una función que ya empleé en parte en el siguiente post: FUNCIÓN PARA ELIMINAR TILDES EN EXCEL CON POWER QUERY la he modificado con Text.Split() para identificar el delimitador que vamos a tener en cuenta, el guion (-) y realizar el reemplazo.

En esta imagen he incluido las dos funciones que vamos a utilizar y he analizado los datos que he importado del archivo de texto mostrando así las fechas que muestran los datos (y como podéis observar febrero es la única fecha que sale correcta).

Ahora os mostraré el resultado de aplicar las dos funciones:

Después de aplicar las dos funciones, vemos que los reemplazos han sido correctamente realizados pero siguen en formato texto, el siguiente paso es analizar el valor de los datos y ver si podemos pasarlas a formato fecha:

Y como podéis observar a continuación, hemos convertido los datos que inicialmente no podíamos tratar como fechas al formato con el que ya podemos trabajar:

Y esto es todo, espero que este ejemplo y esta alternativa al ejercicio propuesto en el canal de YouTube sea de vuestro interés.

¿Te ha resultado de interés?, puedes apoyar a Excel Signum con una pequeña donación.

Donate Button with Credit Cards

¡¡Muchas gracias!!

Mediante la suscripción al blog, la realización comentarios o el uso del formulario de contacto estás dando tu consentimiento expreso al tratamiento de los datos personales proporcionados según lo dispuesto en la ley vigente (LOPD). Tienes más información al respecto en esta página del blog: Política de Privacidad y Cookies

Comparte este post

Si te ha gustado o tienes alguna duda, puedes dejar aquí tu comentario.

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies

ACEPTAR
Aviso de cookies