none
Eliminar texto de una cadena por posición RRS feed

  • Pregunta

  • Hola, buenas noches.

    Se me plantea una duda siguiendo la siguiente página de  microsoft

    Queremos eliminar texto de un string que esté en la posición 6y7. Cómo lo hacemos?

    Tenemos un array de string con texto separado por comas y el texto de la misma: "Fecha,nombre,apellido,1,2,3". Si queremos eliminar por ejemplo la variable "nombre" teniendo en cuenta que nombre va variando en cada linea del array, entiendo que habría que eliminar por posición. En este caso sería la posición 3 ya que se usa como carácter separador la coma.

    Cómo lo haríamos? GRACIAS

    domingo, 1 de noviembre de 2020 19:05

Respuestas

  • Bien, primera cosa a tener en cuenta: En .Net los strings son inmutables, por lo que no se puede "eliminar" nada de un string. Lo que hay que hacer es construir un nuevo string y trasladar a éste las partes que se deseen conservar del antiguo. Así pues, para eliminar la posición 3, lo que tienes que hacer es copiar lo que haya en las posiciones 1 y 2 seguido de lo que haya de la 4 en adelante.

    Si las posiciones están delimitadas por una coma, puedes trocear el string por las comas usando la función Split. Después vuelves a ensamblar un nuevo string combinando las partes que se desea guardar. Nótese que si lo deseas puedes volver a meter el string resultante en la misma variable inicial, pero eso no quiere decir que realmente hayas "eliminado" una porción de la cadena inicial; internamente se asigna una nueva cadena para almacenar ese contenido.

    string ejemplo = "Fecha,nombre,apellido,1,2,3";
    
    string[] partes = ejemplo.Split(new char[]{','});
    ejemplo = string.Join(',', partes, 0, 2) + "," + string.Join(',', partes, 3, partes.Length-3);


    domingo, 1 de noviembre de 2020 20:13
    Moderador
  • Hola Georgina

    1) Para eliminar len caracteres de un string desde inicio:

    string nuevo = viejo.Remove(inicio, len);

    2) Para eliminar el 2do substring de la linea (borra también la coma):

    string linea = "Fecha,nombre,apellido,1,2,3";

    int inicio = linea.IndexOf(',') + 1;

    int len = linea.IndexOf(',', inicio) + 1 - inicio;

    string lineaSinNombre = linea.Remove(inicio, len);

    IndexOf() busca el índice del char o substring, (desde inicio si se especifica)

    Saludos

    Pablo

    domingo, 1 de noviembre de 2020 20:21

Todas las respuestas

  • Bien, primera cosa a tener en cuenta: En .Net los strings son inmutables, por lo que no se puede "eliminar" nada de un string. Lo que hay que hacer es construir un nuevo string y trasladar a éste las partes que se deseen conservar del antiguo. Así pues, para eliminar la posición 3, lo que tienes que hacer es copiar lo que haya en las posiciones 1 y 2 seguido de lo que haya de la 4 en adelante.

    Si las posiciones están delimitadas por una coma, puedes trocear el string por las comas usando la función Split. Después vuelves a ensamblar un nuevo string combinando las partes que se desea guardar. Nótese que si lo deseas puedes volver a meter el string resultante en la misma variable inicial, pero eso no quiere decir que realmente hayas "eliminado" una porción de la cadena inicial; internamente se asigna una nueva cadena para almacenar ese contenido.

    string ejemplo = "Fecha,nombre,apellido,1,2,3";
    
    string[] partes = ejemplo.Split(new char[]{','});
    ejemplo = string.Join(',', partes, 0, 2) + "," + string.Join(',', partes, 3, partes.Length-3);


    domingo, 1 de noviembre de 2020 20:13
    Moderador
  • Hola Georgina

    1) Para eliminar len caracteres de un string desde inicio:

    string nuevo = viejo.Remove(inicio, len);

    2) Para eliminar el 2do substring de la linea (borra también la coma):

    string linea = "Fecha,nombre,apellido,1,2,3";

    int inicio = linea.IndexOf(',') + 1;

    int len = linea.IndexOf(',', inicio) + 1 - inicio;

    string lineaSinNombre = linea.Remove(inicio, len);

    IndexOf() busca el índice del char o substring, (desde inicio si se especifica)

    Saludos

    Pablo

    domingo, 1 de noviembre de 2020 20:21
  • Gracias por la explicación.

    Muy amables los dos.

    Cordiales saludos.

    domingo, 1 de noviembre de 2020 20:36
  • Hola GeorginaRomero, 

      

    ¿Alguna novedad sobre la consulta realizada? ¿Han sido útiles las  respuestas proporcionadas?  

    Espero su respuesta.  

    Gracias por usar los foros de MSDN.  

    Andres Aguilar 

    ____________________________  

     

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.

    Si tiene algún cumplido o reclamo sobre el soporte de MSDN sientase en la libertad de contactar  MSDNFSF@microsoft.com. 

    lunes, 2 de noviembre de 2020 18:06
    Moderador