Visual Basic.NET - Extraer un numero indeterminado en una cadena de texto

 
Vista:
sin imagen de perfil

Extraer un numero indeterminado en una cadena de texto

Publicado por Emanuel (25 intervenciones) el 08/10/2015 21:33:41
---SE APLICA A VB 2010---
Hola gente!! Como andan? Tengo un programa en VB.NET y quisiera saber esto. Espero explicarme bien, sino preguntenme qué no entendieron y lo vemos juntos:
Tengo un ListBox (LstDescripcion), un Button (BtnAgregar), y un Label (LblDescuento). Bien, hasta ahora facil; al apretar el BtnAgregar, me tiene que enviar a la LstDescripcion una cadena de texto que tiene los siguientes "campos" INCLUIDO LOS "-" (son varios TextBox): Codigo de Cliente - Producto - Precio - Cantidad - Subtotal*. Entonces, lo que hago es, en el evento Click del BtnAgregar agregar esto:
LstDescripcion.Items.Add(TxtCodCliente.Text & " - " & CmbProducto.Text & " - " & TxtPrecio.Text & " - " & TxtCantidad.Text & " - Subtotal: " & LblSubtotal.Text). (POR EJEMPLO: 1234 - CocaCola - 10 - 350 - 3500) Todo genial.
El problema empieza cuando en un punto de un ejercicio me pide:
1) Descuento de 5% del valor total (SUBTOTAL), para valores entre $3000 y $4000. Este no es el problema, ya que en el evento SelectedIndexChanged de la LstDescripcion hago un Select Case de la siguiente manera:
Select Case Val(Microsoft.VisualBasic.Right(LstDescripcion.SelectedItem, 4))
Case 3000 To 4000
LblDesc.Text = Val(Microsoft.VisualBasic.Right(LstDescripcion.SelectedItem, 4)) * 5 / 100
End Select

AHORA VIENE EL PROBLEMA, ya que el punto anterior dice "Entre $3000 y $4000", por lo tanto son 4 cifras, y no hay problema. Pero este punto dice:
2) 10% del total, para compras mayores a $4000.
¿Me explican como tengo que hacer para realizar un descuento SI TENGO MAS DE 4 CIFRAS? ¿Por que? Porque es la funcion Right la que me cuenta 4 caracteres de derecha a izquiera, pero aca puede VARIABLE; pueden ser mas de 4.
Ese es el problema; sin embargo, con un VECTOR se podria resolver, pero el tema es que NO HAY QUE USARLO. Ademas, no puedo usar el LblSubtotal porque, si ingrese 8 registros y apreto el Nº4 de la LstDescripcion, me va a aparecer el ultimo ingresado, el 8.
*Subtotal = Precio * Cantidad
Desde ya, muchas gracias!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de giancarlo
Val: 377
Bronce
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Extraer un numero indeterminado en una cadena de texto

Publicado por giancarlo (488 intervenciones) el 09/10/2015 02:05:34
Vas a necesitar split, un ejemplo sera mejor porque no soy bueno para la teoria:

dim cadena as string="a.b.c"
dim matriz() as string=cadena.split(".") '

va a separar la cadena por los puntos entonces, nuestro resultado si accedemos a la matriz sera:
matriz(0) sera a
matriz(1) sera b
matriz(2) sera c
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Extraer un numero indeterminado en una cadena de texto

Publicado por Emanuel (25 intervenciones) el 09/10/2015 03:59:00
Hola! Muchas gracias por responder (y tan rapido :P). A que te referis con "un ejemplo"? Te doy yo un ejemplo? Por otra parte, te comento que este es un "modelo" de un examen, y estoy rindiendo el nivel fundamentos. Este nivel es el mas basico de todos, por lo tanto, entre el temario que tiene (las cosas que van a aparecer en el examen) no dice en ningun lado la utilizacion de vectores / matrices. Obviamente se soluciona usando matrices y/o vectores, pero éste aparee en el nivel avanzado.
Pero, como planteo yo, ¿no hay otra forma de averiguar, empezando desde la derecha, saber cuantos numeros (cifras) tengo?
Yo habia pensado en:

1) "Restar" la cadena sin LA ULTIMA PARTE (ahora doy el ejempo), con la cadena GENERAL, guardando el resultado en una variable declarada como String (siempre poniendo el "mas grande" adelante, porque sino daria "negativo". Como por ejemplo, hacer "5 - 2" y no "2 - 5"). Es decir:
cadenarestante = (TxtCodCliente.Text & " - " & CmbProducto.Text & " - " & TxtPrecio.Text & " - " & TxtCantidad.Text & " - Subtotal: " & LblSubtotal.Text) - (TxtCodCliente.Text & " - " & CmbProducto.Text & " - " & TxtPrecio.Text & " - " & TxtCantidad.Text & " - Subtotal: ").
(Es decir, sin el & LblSubtotal.Text). Sin embargo, lo probe y da error (el de "... cuando realiza la conversion, el valor debe ser menor que infinito..."). Por ende, este no va, pero creo que va por ahi la cuestion.

Nota: todo esto en el evento SelectedIndexChanged de la LstDescripcion.

Ahora mismo, no me acuerdo de la otra posibilidad ya que no estoy en la computadora donde tengo el programa jajaj.

Gracias por contestar!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar