Principales respuestas
Recortar caracteres de un string String

Pregunta
-
He estado mirando en la librería de msdn que para recortar caracteres se utiliza la propiedad REMOVE que dado un índice y la cantidad de caracteres a remover, los tendría que quitar.
Todo bien hasta el momento sin embargo en mi caso no siempre se cuantos caracteres me sobran es decir tengo la cadena:
P0047347_001_004
P0047347_001_0
P004734704
y lo que yo necesito es solamente los primeros 8 es decir P0047347 por decir un ejemplo.
Yo tengo mi código de esta forma:
nodoArchivo.Text = Path.GetFileNameWithoutExtension(nombreArchvo.FullName).Remove(8, 8);
Me funciona solamente cuando mi string se encuentra de esta forma:
P0047347_001_004
Pero me presenta un error o información equivocada cuando el string esta de esta forma
P0047347_001_0
P0047347_04
Existe otra forma de indicarle solo me tome en Cuente los primeros 8 y lo demás ya no los tome.
De antemano gracias por su ayuda...
HB
Respuestas
-
- Marcado como respuesta HB System martes, 8 de noviembre de 2011 18:58
-
Y de hecho si solo te interesan digitos, el codigo pudiera simplificarse aun mas de la siguiente forma:
private void button1_Click(object sender, EventArgs e) { string cadena = "P0047347_001_004"; MessageBox.Show(devuelveOcho(cadena)); } string devuelveOcho(string cadena) { string cadenaAux = ""; Regex.Replace(cadena, "[^0-9]", "").Take(8).ToList().ForEach(delegate(char c) { cadenaAux += c.ToString(); }); return cadenaAux; }
Si te fijas, desde la expresión regular se realiza el filtro para tomar en cuenta solo numeros. Con lo cual nos ahorramos un poco de linQ.saludos amigo..
----------------------------
Si te sirve alguna respuesta no olvides marcarla como tal o votarla.
- Marcado como respuesta HB System martes, 8 de noviembre de 2011 19:00
Todas las respuestas
-
hola
y si haces
string cadena = "P0047347_001_004"; string[] partes cadena.Split('_'); if(partes.Length >= 1){ string resultado = partes[0]; }
saludos
Leandro Tuttini
Blog
Buenos Aires
Argentina- Editado Leandro TuttiniMVP martes, 8 de noviembre de 2011 17:48
-
-
-
Gracias Leandro por tu tiempo y tu respuesta.
Deja explicarlo una vez más tengo
nodoArchivo.Text tiene un string sin embargo no se qué tamaño tiene pero yo solo necesito los primero 8 dígitos
Puede que estén de esta forma
P0047347_001_004
P0045347_001_0
P004434704458
P004834704568
Algunos traen _ y otros no pero solo necesito los primero 8 dígitos de esa cadena.
Yo le estaba asiendo de esta forma pero me causo error.
nodoArchivo.Text = Path.GetFileNameWithoutExtension(nombreArchvo.FullName).Remove(8, 8);
Gracias de antemano.
HB -
- Marcado como respuesta HB System martes, 8 de noviembre de 2011 18:58
-
Que tal amigo, prueba esto:
private void button1_Click(object sender, EventArgs e) { string cadena = "P0047347_001_004"; MessageBox.Show(devuelveOcho(cadena)); } string devuelveOcho(string cadena) { string soloAlfaNumericos = Regex.Replace(cadena, "[^a-zA-Z0-9]", ""); List<char> lista = (from c in soloAlfaNumericos where Char.IsDigit(c) select c).Take(8).ToList(); string cadenaAux = ""; lista.ForEach(delegate(char c) { cadenaAux += c.ToString(); } ); return cadenaAux; }
En este caso te devuelve 8 DIGITOS; si quisieras devolver tambien LETRAS solo cambia la linea:
where Char.IsDigit(c) por: where Char.IsLetterOrDigit(c)
----------------------------
Si te sirve alguna respuesta no olvides marcarla como tal o votarla.
-
Y de hecho si solo te interesan digitos, el codigo pudiera simplificarse aun mas de la siguiente forma:
private void button1_Click(object sender, EventArgs e) { string cadena = "P0047347_001_004"; MessageBox.Show(devuelveOcho(cadena)); } string devuelveOcho(string cadena) { string cadenaAux = ""; Regex.Replace(cadena, "[^0-9]", "").Take(8).ToList().ForEach(delegate(char c) { cadenaAux += c.ToString(); }); return cadenaAux; }
Si te fijas, desde la expresión regular se realiza el filtro para tomar en cuenta solo numeros. Con lo cual nos ahorramos un poco de linQ.saludos amigo..
----------------------------
Si te sirve alguna respuesta no olvides marcarla como tal o votarla.
- Marcado como respuesta HB System martes, 8 de noviembre de 2011 19:00
-
-
-
Buen día para ti tambien!! Que bien que te haya servido de algo, y de paso todos aprendemos mas. Y fijate que aun se puede simplificar mas haciendo uso de las maravillas de linQ, aunque nuestro codigo se vuelve un poquito mas complejo:
string devuelveOcho3(string cadena) { return ((from c in Regex.Replace(cadena, "[^0-9]", "") select c).Take(8).ToList()).Aggregate("", (a, b) => a + b); }
saludos----------------------------
Si te sirve alguna respuesta no olvides marcarla como tal o votarla.