Como Usar Split con Expresiones Regulares

Desde mi BD en SQL jalo el registro "producto", este registro esta formado por dos partes el nombre del producto y su media, los nombres de los productos son totalmente variados, como ejemplo coloco el siguiente : "Factura 91/2 X 4 X 11" ( los productos son formularios en papel, facturas, boletas, guías etc.)
Lo que necesito haces es obtener unicamente la parte correspondiente al nombre del producto y no la medida . Para el ejemplo anterior, debería unicamente mostar : "Factura".
Me he enredado pues pensé que seria sencillo hacerlo, lo más cercano que he llegado es a usar el comando SPLIT, para en mi lógica indicarle que cuando encuentre un "numero" corte la cadena .. Quedando así dividía en 2 partes la parte"letras" y la parte "numeros" . He probado colocando un dígito al azar y funciona muy bien, por ejemplo así :
Split(Text1(2).Text, 9 )
Y escojo un producto cuya medida inicie en 9 y en efecto lo divide. (Tex1(2) es el textbox en donde muestro este registro extraído de la BD)
Y aquí es donde no se si lo que sigue es posible... Poner una expresión regular y que el split funcione al encontrar cualquier numero, ninguna de las que puesto y que considere las comunes me ha funcionado . Por ejemplo he probado :
Split(Text1(2).Text, [0-9]) , Split(Text1(2).Text, "[0-9]") Split(Text1(2)Text, /d) , Split(Text1(2).Text, /\d/) y etc ....
Y ya me entro la duda si no estoy colocando bien si me falta una comilla o algo o simplemente Split en el visual basic no trabaja con expresiones regulares. En cuyo caso no se entonces que hacer .

1 Respuesta

Respuesta
1
Split(expression[, delimiter[, count[, compare]]])
Dónde:
Expresión: es una cadena, o expresión que de como resultado una cadena, de la que queremos sacar los elementos.
Delimiter: (opcional), es el separador que le indicará a la función como están separados los elementos; por defecto es un espacio. Si el delimitador es una cadena vacía, se devolverá un array con sólo un elemento conteniendo toda la cadena.
Count: (opcional), el número de elementos que se devolverá en el array, si no se indica o se usa -1, se devolverá cada subcadena en un elemento del array. Si este valor es menor que el número de subcadenas, en el último elemento del array se asignará el resto de la cadena.
Compare: (opcional), el tipo de comparación que se realizará para evaluar el delimitador dentro de la expresión.
Trata de poner en el lugar de compare los números del 0 al 9 para que los busque dentro de la cadena.
Si no funciona intenta encerrar en un ciclo del 0 al 9 el comando para saber si la división es una palabra o tiene números tipo
dim strtexto, numero as string
for i = 0 to 9 step 1
    numero = str(i)
      strtexto = split(text1, numero)
       if not (isnumeric(right(strtexto,1) )) then   exit for
next
Ok gracias, ¿voy a probar lo que me indicas... la primera alternativa no la entendí mucho ... porque que debería poner en "delimiter"? ... Es decir lo que te entendí seria algo así : split (Text1(2).Text,,,[0-9]) me refiero a la sintaxis. la idea te la capte ... ¿pero creo que ya estoy loco con las sintaxis . como lo pondría?
De la segunda alternativa, la comprendí más y de hecho la probé ... tan solo agregue en la declaración que srttexto es una cadena ( Dim srttexto() As String ) y quedo así el for :
for i = 0 to 9 step 1
numero = str(i)
strtexto = split(text1, numero)
/ Como el split ya saca dos cadenas 'letras' y 'numeros'
/ Entonces strtexto(0) sera la formada por las letras, la inicial
/ srttexto(1) sera la formada por los numeros la segunda
if not (isnumeric(right(strtexto(0) ,1) )) then exit for
next
Entonces no se si la capte bien pero si el valor isnumeric es falso es decir si strtexto(0) esta formado solo por letras debería salirse ya del for.
Por lo que podría tomar el valor strtexto(0) y usarlo, ¿es así?
Bueno lo probé y no funciono :( ... lo único que hizo fue quitarle un elemento al final de la cadena original .. es decir si mi produtco es : ¿FACTURA 91/2 X 15 X 4 me entrego FACTURA 9 1/2 X 15 X
osea sin el ultimo 4 ... hice mal en tomar el valor strtexto(0) como el resultado? ...
Gracias por la respuesta
Oks vamos a hacer algo más básico tomado el ciclo que te envíe has los siguiente:
Dim i As Integer
Dim strText, strProducto As String
For i = 1 To Len(Me.Text1.Text) Step 1
strText = Mid(Me.Text1.Text, i, 1)
If Not (IsNumeric(strText)) Then
strProducto = strProducto + strText
Else
Exit For
End If
Next
Me.Text2.Text = strProducto
donde me.text? son los textbox de la aplicación y el codigo lo puedes poner en el comand o donde lo utilices.
Hola, no me pude conectar temprano hoy... pero modifique algo el primer código que me diste y funciono paso a ponerte mis modificaciones :
Dim strtexto() As String
Dim numero As String
For i = 0 To 9 Step 1
numero = Str(i)
strtexto = Split(Text1(2).Text, numero)
If (IsNumeric(strtexto(0))) Then Exit For
Next
Saque el Right pues con el estaba tomando la parte derecha de la subcadena unicamente, y quite el Not en el If, para trabajar directamente con el srtexto(0) osea la parte izquierda del split y funciono ... se sale de for cuando isnumeric comprueba que dicha parte no es un valor numérico... ya ya pude usar srtexto(0) para lo que deseaba.
Gracias por tu ayuda.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas