Estoy haciendo el mantenimiento de un E-commerce desarrollado en C#, en el cual se realiza el registro de personas donde se inserta el nombre y correo electrónico. Todos los datos se almacenan en un archivo CSV.
Pero todos los registros de una persona están contenidos en una sola línea del CSV y para realizar la visualización y el filtrado de datos tenemos cierta dificultad.
El siguiente ejemplo muestra cómo recibo los datos de la persona.
string personaRecebida = "EliasRibero;[email protected]";
Pero necesitamos enviar un correo electrónico de marketing (newsletter) con las promociones del mes a todos los correos electrónicos registrados en el ecommerce.
Sin embargo, cuando intentamos enviar los correos electrónicos terminamos teniendo un error de envío porque el nombre de los usuarios venía junto con el correo electrónico:
Para enviar un boletín sólo tengo que utilizar el correo electrónico, por lo que tenemos que separar estos datos. ¿Cómo podemos hacerlo?
Tenemos algunas alternativas para hacer solo una parte del texto dentro de una string. Sin embargo, cuando pienso en hacer separaciones, luego pienso en utilizar Substring pues este método hace la separación de la cadena en una subparte.
Para eso tengo que pasar la posición inicial y final que quiero separar.
Por ejemplo, tengo la siguiente string:
string personaRecebida = "Elias;[email protected]";
Para hacer la extracción solo del correo electrónico. Tengo que pasar la posición inicial del correo electrónico y la posición final. En este caso la posición inicial es la 6 que es el comienzo del correo electrónico y la posición final es la 15 que es cuando termina el correo electrónico.
string personaRecebida = "Elias;[email protected]";
string email = personaRecebida.Substring(6,15);
Console.WriteLine( email);
Tenga en cuenta que al usar una Substring tengo un punto malo, ya que cada vez que tengo una cadena de personas Recibido diferente, tengo que cambiar los valores de las posiciones.
Intentaré separar el correo de Leticia.
string personaRecebida = "Leticia;[email protected]";
string email = personaRecebida.Substring(6,18);
Console.WriteLine( email);
Y tendremos esa salida:
a;leticial@leticia
No era este tipo de salida lo que me gustaría obtener, porque aquí tengo una parte del nombre y no tengo la dirección de correo completa.
Debido a que la función SubString no pudo realizar la separación correctamente, tendré que buscar más funciones en la documentación.
Necesito algo que corte entre el nombre y el correo electrónico y los separe en dos. ¿Pero hay alguna otra manera de hacerlo?
Al revisar la documentación encontré la función Split que también realiza la separación. Vamos a entender un poco más de las características de esta función y ver si encaja mejor.
Ya que no podemos hacer la separación usando el Substring. Hagamos la separación usando Split , que separa los valores según el parámetro que indicamos que es el divisor de información.
En nuestro caso sería ;
para dividir la string, ya que es el elemento que divide el nombre del correo electrónico en la lista csv.
string registroDeUsuario = "Elias;[email protected]";
string[] datosDeRegistro = registroDeUsuario.Split(';');
Console.WriteLine(datosDeRegistro);
La salida será:
System.String[]
Split nos devolverá un array de string de dos posiciones, donde la primera posición será el nombre y la segunda posición será la dirección de correo electrónico. Aquí tomamos solo el array de cadena por lo que se devolverá el System.String[], pero queremos recopilar solo el correo electrónico..
Como es un array solo puedo seleccionar un dato, en los datos de nuestro correo electrónico, que está en la segunda posición del array.
string registroDeUsuario = "Elias;[email protected]";
string[] datosDeRegistro =registroDeUsuario.Split(';');
Console.WriteLine(datosDeRegistro[1]);
//Salida: [email protected]
Con esto toda la persona que recibimos podremos extraer el correo electrónico de CSV.
Comenzamos con un CSV con varios tipos de datos, del cual no era posible verificar cuál era el correo electrónico y el nombre, porque tendríamos que recuperar la separación del correo electrónico a mano.
Luego tendríamos que separar los datos que vamos a recibir. Optamos por utilizar el método substring que realiza la separación de la string que pasamos en subpartes. Pero como el tamaño de la string puede cambiar, no sería un buen uso.
Con todo esto buscamos en la documentación otro método que nos ayudara y encontrar Split.
Realiza la separación según el valor que vamos a pasar como parámetro, así sin importar el tamaño que tenga nuestra string podremos separar los valores.
¿Qué te pareció? Ahora es más fácil trabajar con datos en C# ¿no crees? Si quieres seguir estudiando sobre el tema, echa un vistazo a nuestros cursos en Alura de C# ¡sigue aprendiendo!
Escrito para Alura por Elias Ribeiro.
Traducido para Alura Latam por Priscila Stork
Cursos de Programación, Front End, Data Science, Innovación y Gestión.
Luri es nuestra inteligencia artificial que resuelve dudas, da ejemplos prácticos y ayuda a profundizar aún más durante las clases. Puedes conversar con Luri hasta 100 mensajes por semana
Paga en moneda local en los siguientes países
Cursos de Programación, Front End, Data Science, Innovación y Gestión.
Luri es nuestra inteligencia artificial que resuelve dudas, da ejemplos prácticos y ayuda a profundizar aún más durante las clases. Puedes conversar con Luri hasta 100 mensajes por semana
Paga en moneda local en los siguientes países
Puedes realizar el pago de tus planes en moneda local en los siguientes países:
País | |||||||
---|---|---|---|---|---|---|---|
Plan Semestral |
487.37
BOB |
69289.36
CLP |
307472.10
COP |
65.90
USD |
264.35
PEN |
1435.53
MXN |
2978.57
UYU |
Plan Anual |
738.82
BOB |
105038.04
CLP |
466107.17
COP |
99.90
USD |
400.74
PEN |
2176.17
MXN |
4515.32
UYU |
Acceso a todos
los cursos
Estudia las 24 horas,
dónde y cuándo quieras
Nuevos cursos
cada semana