Ayuda! Separadores en un textbox

Iniciado por birdez, 30 Mayo 2012, 17:39 PM

0 Miembros y 1 Visitante están viendo este tema.

birdez

Hola buenas tardes a todos

Necesito saber como puedo detectar los espacios, comas, puntos, puntos apartes, ..... en un textbox ya que estoy realizando un traductor y solo consigo que me detecte palabras sueltas y las traduzca a otro textbox :S ,  en cuanto le pongo un separador no hace nada y era x si alguien me podría ayudar en este aspecto

muchas gracias a todos un saludo!

kub0x

Para detectar caracteres tipo coma, punto, espacio, punto y coma.. lo haría con expresiones regulares. Pero como no las domino, lo hago inicializando una Matriz que contendrá los Separadores. Una Matriz no es más que la colección de datos de un mismo tipo, separados u ordenados por índices.

Aquí te dejo el código, me funciona de madre ^^

Código (VB.NET) [Seleccionar]

   Private Sub Listar_Separadores(Byval Texto As String)
       Dim Separadores() As Char = ";,. -_\/<>" 'Inicializamos la Matriz añadiendole varios Separadores, Puedes AÑADIR más
       Dim Palabra As String = "ehnrules;" ' Deberias poner la variable Texto (yo aqui puse un ejemplo simplemente para probar que funcionaba)
       For i As Int32 = 0 To Separadores.Length - 1
           For j As Int32 = 0 To Palabra.Length - 1
               If Separadores(i) = Palabra.Substring(j, 1) Then
                   MsgBox("Se encontró un separador: " & Separadores(i))
               End If
           Next
       Next
   End Sub


Saludos.
Viejos siempre viejos,
Ellos tienen el poder,
Y la juventud,
¡En el ataúd! Criaturas Al poder.

Visita mi perfil en ResearchGate


birdez

gracias por el codigo pro yo lo que necesito es que vaya leyendo la palabra y al encontrar un separador detecte q es uno de esos y lo interprete cn forme es un espacio, por ejemplo, y siga leyendo la sieguiente palabra para traducirla

sabes lo q quiero decirte? sq alomejor no me explico bn y es x mi culpa q no entiendas bn lo q quiero decir xD

kub0x

El código que te adjunte básicamente lista todos los Separadores encontrados en una palabra. Tu lo que quieres es identificar separadores para luego borrarlos y traducir la palabra sin los separadores. Bueno, piensa un poquito en como hacerlo y como adaptar el código :P

Saludos.
Viejos siempre viejos,
Ellos tienen el poder,
Y la juventud,
¡En el ataúd! Criaturas Al poder.

Visita mi perfil en ResearchGate


birdez

si algo asi yo lo q quiero es que me identifique solamente las palabras y no los separadores lo q pasa q no se me ocurre ninguna forma de hacerlo xq mi duda es como ago para eliminar ese separador y q luego al pasar la traduccion de la frase al segundo textbox me vuelva a poner los separadores que elimine anteriormente y me los coleque cada uno en su sitio xD

79137913

HOLA!!!

Este codigo que hice el año pasado te sirve para lo que queres hacer...

Es para vb6 pero creo que es 100% compatible con VBNET

Se llama "MultiSplit"

Cita de: 79137913
HOLA!!!

Hoy queria hacer un split que devuelva un array con varios delimitadores y aparte tenga la opcion de guardar el delimitador... en fin... hice esta funcion, espero que les sirva.

Antes que el codigo Ejemplo:

Código (vb) [Seleccionar]
Private Sub Ejemplo()
Dim dels(3) As String
Dim result() As String
Const ss As String = "hola+como--andas(((esto====es+una--prueba"
   dels(0) = "+"
   dels(1) = "--"
   dels(2) = "((("
   dels(3) = "===="
   
   'sin preservar delimitadores
   result = MultiSplit7913(ss, dels, False)
   'result = ("hola";"como";"andas";"esto";"es";"una";"prueba")
   
   'preservando delimitadores
   result = MultiSplit7913(ss, dels, True)
   'result = ("hola";"+como";"--andas";"(((esto";"====es";"+una";"--prueba")
End Sub


El Codigo

Código (vb) [Seleccionar]
Private Function MultiSplit7913(expression As String, Delimiter() As String, PreserveDel As Boolean) As String()
Dim DelCount    As Long
Dim lExp        As Long
Dim X           As Long
Dim Pos         As Long
Dim DelPos()    As Long
Dim AuxArr()    As String
Dim LastPos     As Long
Dim LastLen     As Long
Dim LastInstr   As Long

   expression = expression & Delimiter(0)
   lExp = Len(expression)
   DelCount = UBound(Delimiter)
   ReDim DelPos(lExp)

   For X = 0 To DelCount
       Pos = 1
       LastInstr = InStr(Pos, expression, Delimiter(X))
       Do While LastInstr <> 0
           DelPos(LastInstr) = X + 1
           Pos = LastInstr + Len(Delimiter(X)) + Pos
           LastInstr = InStr(Pos, expression, Delimiter(X))
       Loop
   Next

   ReDim AuxArr(0)

   LastPos = 1

   For X = 0 To lExp
       If DelPos(X) <> 0 Then
           ReDim Preserve AuxArr(UBound(AuxArr) + 1)
           If PreserveDel Then
               AuxArr(UBound(AuxArr) - 1) = Mid$(expression, LastPos, X - LastPos)
           Else
               AuxArr(UBound(AuxArr) - 1) = Mid$(expression, LastPos + LastLen, X - LastPos - LastLen)
               LastLen = Len(Delimiter(DelPos(X) - 1))
           End If
           LastPos = X
       End If
   Next

   ReDim Preserve AuxArr(UBound(AuxArr) - 1)

   MultiSplit7913 = AuxArr

End Function


GRACIAS POR LEER!!!

GRACIAS POR LEER!!!
"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!"
"La peor de las ignorancias es no saber corregirlas"

79137913                          *Shadow Scouts Team*

birdez

:S

no entiendo la mayoria de las cosas que aparecen ahi jajajajaja

muchas gracias por paasarmelo pro no entiendo mucho la verdad mirare a ver si consigo comprender algo pro ya te digo q la mayoria de cosas no me suenan jajajaja

si quereis os paso el codigo que tengo asi mas o menos os podeis imaginar como tengo montado el "traductor" este jajajajaja

gracias a todos de nuevo x la ayuda

kub0x

Postea una parte del código, así vemos como interpretas cada cosa, como la plasmas y si hay algun error de código.

@79137913: Tu código extrae los Separadores y los borra, no? Si le echas un vistazo al code que adjunté comprobaras que lista cada separador. Sólo faltaría añadirle que borrara el separador extraído, cosa que no ocupa más que una linea xD

P.D=No es recomendable emplear sintaxis de VB6 en .NET

Saludos.
Viejos siempre viejos,
Ellos tienen el poder,
Y la juventud,
¡En el ataúd! Criaturas Al poder.

Visita mi perfil en ResearchGate


79137913

HOLA!!!

@Kub0x: No, mi codigo no extrae los Separadores y los borra...

Mi codigo lo que hace es tomar un string cualquiera y seararlo por los separadores colocados en el array "Delimiter()" y vuelca todos los items resultantes en un nuevo array (resultado de la funcion).

Si sabes lo que hace la funcion Split, lo vas a entender, sino no.

Testeala y lee bien el ejemplo.

Y por que no es recomendable? ...  Utilizo funciones fuera del framework, osea mejor!

GRACIAS POR LEER!!!
"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!"
"La peor de las ignorancias es no saber corregirlas"

79137913                          *Shadow Scouts Team*

kub0x

@79137913: En un principio no lei tu code completamente. Lo que creo que hace es separar cada palabra de otra añadiendole un separador, formando una cadena con el siguiente formato (ejemplo): Palabra;Palabra2;Palabra3; Funciona de esta forma?

No es recomendable dicha combinación por el hecho de que .NET es la evolucion de VB6 y trabaja con el Framework de .NET , el cual ofrece infinidad de clases para trabajar dentro del lenguaje, cosa que VB6 no contiene. Si vas a emplear sintaxis de VB6 en .NET , mejor que agarres VB6 xD (ironic mode). No, pero por ahí escuché críticas de algunos métodos de VB6 que están obsoletos en .NET

Saludos.
Viejos siempre viejos,
Ellos tienen el poder,
Y la juventud,
¡En el ataúd! Criaturas Al poder.

Visita mi perfil en ResearchGate