Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Visual Basic 2005 - Diccionario

Estas en el tema de Visual Basic 2005 - Diccionario en el foro de Visual Basic clásico en Foros del Web. Hola a todos aca nuevamente su amigo moradazo Estoy desarrollando un diccionario de inglés a español y viceversa. Todos los datos del diccionario los necesito ...
  #1 (permalink)  
Antiguo 14/07/2008, 19:46
Avatar de moradazo  
Fecha de Ingreso: julio-2008
Ubicación: [email protected]
Mensajes: 355
Antigüedad: 15 años, 10 meses
Puntos: 2
Visual Basic 2005 - Diccionario

Hola a todos aca nuevamente su amigo moradazo

Estoy desarrollando un diccionario de inglés a español y viceversa. Todos los datos del diccionario los necesito agregar en un archivo .ini para poder ir incrementando la cantidad de datos conforme se vayan agregando.

Entiendo que el programa funciona con un FOR pero no se ubicar cuando tengo los textos:

Clock,Reloj
Gun,Pistola
Hello,Hola

Cuando tengo eso en el .ini aun no se como ubicar que antes de la coma es ingles, y después es español, además que lo busque y lo relacione en la línea que está. Sería una gran ayuda en este estupendo foro. Gracias.
  #2 (permalink)  
Antiguo 15/07/2008, 07:47
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Exclamación Respuesta: Visual Basic 2005 - Diccionario

Puedes usar Split para dividir la cadena en dos (separado por la coma) y haces la traducción. O el problema es que no sabes cómo tomar los datos del *.ini.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #3 (permalink)  
Antiguo 15/07/2008, 12:09
Avatar de moradazo  
Fecha de Ingreso: julio-2008
Ubicación: [email protected]
Mensajes: 355
Antigüedad: 15 años, 10 meses
Puntos: 2
Respuesta: Visual Basic 2005 - Diccionario

Cita:
Iniciado por David el Grande Ver Mensaje
Puedes usar Split para dividir la cadena en dos (separado por la coma) y haces la traducción. O el problema es que no sabes cómo tomar los datos del *.ini.
Si amigo, ese es el problema, no se como capturar la busqueda del .ini, si me pudieras ayudar.
  #4 (permalink)  
Antiguo 15/07/2008, 12:16
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Exclamación Respuesta: Visual Basic 2005 - Diccionario

Pues bien, en este tema te han respondido cómo sacar los datos del *.ini. Solo debes hacer un bucle que recorra todos los datos hasta que encuentre el que desees.

Saludos
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #5 (permalink)  
Antiguo 17/07/2008, 12:19
Avatar de moradazo  
Fecha de Ingreso: julio-2008
Ubicación: [email protected]
Mensajes: 355
Antigüedad: 15 años, 10 meses
Puntos: 2
Respuesta: Visual Basic 2005 - Diccionario

Bueno algo pude lograr con el diccionario. Pero ahora necesito algo similar:

Resulta que tengo un listview con varias columnas, supongamos Nombre, Apellido y ID, y necesito hacer que escribiendo una palabra en un textbox me busque todo lo relacionado con el, por ejemplo escribo un apellido "Mendoza" y que me despliegue todas las personas con ese apellido mas el nombre y la ID correspondiente. Todos los datos se encuentran en un archivo ini que tengo, lo que me cuesta entender es como puedo usar esa palabra para que busque en el listview. Gracias.
  #6 (permalink)  
Antiguo 17/07/2008, 12:34
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Exclamación Respuesta: Visual Basic 2005 - Diccionario

Pero, cuando busques un dato, ¿quieres que te muestre solo los elementos que coincidan con el dato buscado?. Entonces deberás buscar directamente en el *.ini y no con el ListView, con un bucle For no tendrás mucho problema.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #7 (permalink)  
Antiguo 17/07/2008, 13:13
Avatar de moradazo  
Fecha de Ingreso: julio-2008
Ubicación: [email protected]
Mensajes: 355
Antigüedad: 15 años, 10 meses
Puntos: 2
Respuesta: Visual Basic 2005 - Diccionario

Cita:
Iniciado por David el Grande Ver Mensaje
Pero, cuando busques un dato, ¿quieres que te muestre solo los elementos que coincidan con el dato buscado?. Entonces deberás buscar directamente en el *.ini y no con el ListView, con un bucle For no tendrás mucho problema.
Si David, exacto ese bucle es el que me da problema saber cual es, si me puedes guiar en esto te lo agradecere muchisimo.

Gracias!
  #8 (permalink)  
Antiguo 21/07/2008, 00:20
Avatar de moradazo  
Fecha de Ingreso: julio-2008
Ubicación: [email protected]
Mensajes: 355
Antigüedad: 15 años, 10 meses
Puntos: 2
Respuesta: Visual Basic 2005 - Diccionario

Por favor, que alguien me ayude a hacer el diccionario de inglés-español nada más necesito saber el bucle que me busque en el archivo .ini

Gracias!
  #9 (permalink)  
Antiguo 21/07/2008, 03:00
Colaborador
 
Fecha de Ingreso: enero-2008
Ubicación: Unas veces aquí, otras veces allí
Mensajes: 1.482
Antigüedad: 16 años, 3 meses
Puntos: 37
Respuesta: Visual Basic 2005 - Diccionario

Cita:
Iniciado por moradazo Ver Mensaje
Por favor, que alguien me ayude a hacer el diccionario de inglés-español nada más necesito saber el bucle que me busque en el archivo .ini

Gracias!
Basándonos en aquel ejemplo que te puse para cargar el .ini en un ListView, podemos crear una función como ésta:

Código:
    Private Function Traducir(ByVal sPalabra As String, ByVal Idioma As String) As String
        Dim sb As New System.Text.StringBuilder(255)
        Dim ip As IntPtr = Runtime.InteropServices.Marshal.AllocHGlobal(255)
        Dim bt As Byte = GetPrivateProfileSection("Usuarios", ip, 255, "C:\Temp.ini")

        For i As Integer = 0 To bt - 1
            sb.Append(Convert.ToChar(Runtime.InteropServices.Marshal.ReadByte(ip, i)))
        Next
        sb.Remove(sb.Length - 1, 1)
        Dim Encontrado As Boolean
        Dim sBuscar As String = ""
        For Each line As String In sb.ToString().Split(Convert.ToChar(0))
            Dim iPos As Integer = InStr(line, ",") - 1
            If Idioma = "Ingles" Then
                sBuscar = (Microsoft.VisualBasic.Left(line, iPos))
                If sBuscar = sPalabra Then
                    sBuscar = (Microsoft.VisualBasic.Right(line, Len(line) - iPos - 1))
                    Encontrado = True
                    Exit For
                End If
            Else
                sBuscar = (Microsoft.VisualBasic.Right(line, Len(line) - iPos - 1))
                If sBuscar = sPalabra Then
                    sBuscar = (Microsoft.VisualBasic.Left(line, iPos))
                    Encontrado = True
                    Exit For
                End If
            End If
        Next
        If Encontrado = False Then sBuscar = "No existe en el diccionario"
        Runtime.InteropServices.Marshal.FreeHGlobal(ip)
        Return sBuscar
    End Function
Para llamarla, le pasas como parámetros la palabra a buscar y el idioma.
Suponemos que tenemos dos TextBox, en el primero escribimos la palabra a buscar y en el segundo mostraremos la traducción. También hemos puesto dos Buttons (InglesAEspañol y EspañolAIngles)

Código:
Private Sub InglesAespañol_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles InglesAespañol.Click
        TextBox2.Text = Traducir(TextBox1.Text, "Ingles")
    End Sub

    Private Sub EspañolAingles_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles EspañolAingles.Click
        TextBox2.Text = Traducir(TextBox1.Text, "Español")
    End Sub
  #10 (permalink)  
Antiguo 21/07/2008, 12:48
Avatar de moradazo  
Fecha de Ingreso: julio-2008
Ubicación: [email protected]
Mensajes: 355
Antigüedad: 15 años, 10 meses
Puntos: 2
Respuesta: Visual Basic 2005 - Diccionario

Avellaneda, eres un maestro!

Muchas gracias, el codigo excelente, lo entendi todo bien, y me corre de maravilla, ahora si con amplio conocimiento en el foro, vere si puedo ayudar a los que postean en esta seccion de visual basic, de nuevo Gracias Avellaneda!
  #11 (permalink)  
Antiguo 22/07/2008, 08:43
Avatar de moradazo  
Fecha de Ingreso: julio-2008
Ubicación: [email protected]
Mensajes: 355
Antigüedad: 15 años, 10 meses
Puntos: 2
Respuesta: Visual Basic 2005 - Diccionario

Solo una pregunta mas, con este codigo puedo buscar una fila completa entre varias columnas del listview? Intente hacer el bucle pero solo me selecciona una de las filas, como el diccionario.

necesito algo asi, que se vea cuando escribo algo, todo lo que tenga esa palabra, en este caso el apellido Flores es digitado y en el listview debera desplegar los tres nombres que aparecen subrayados con sus otras columnas. Esta informacion siempre debera de tomarse del archivo .ini que hice. Si me pueden ayudar se los agradecere mucho.

  #12 (permalink)  
Antiguo 22/07/2008, 12:05
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Exclamación Respuesta: Visual Basic 2005 - Diccionario

Bueno, ¿puedes poner el código para buscar?. Es probable que estés saliendo del bucle al encontrar la primera coincidencia.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #13 (permalink)  
Antiguo 23/07/2008, 08:35
Avatar de moradazo  
Fecha de Ingreso: julio-2008
Ubicación: [email protected]
Mensajes: 355
Antigüedad: 15 años, 10 meses
Puntos: 2
Respuesta: Visual Basic 2005 - Diccionario

Si, el bucle que uso es este:

Código:
 For Each line As String In sb.ToString().Split(Convert.ToChar(0))
            Dim iPos As Integer = InStr(line, ",") - 1
                sBuscar = (Microsoft.VisualBasic.Left(line, iPos))
                sBuscar = (Microsoft.VisualBasic.Right(line, Len(line) - iPos - 1))
                Encontrado = True
            Exit For
La pregunta es como o donde pongo el valor del textbox para que mediante de el, sea buscado ahi.

Este codigo es parte de la que me mando Avellaneda anteriormente. Gracias.
  #14 (permalink)  
Antiguo 02/08/2008, 20:36
Avatar de moradazo  
Fecha de Ingreso: julio-2008
Ubicación: [email protected]
Mensajes: 355
Antigüedad: 15 años, 10 meses
Puntos: 2
Respuesta: Visual Basic 2005 - Diccionario

¿Cómo hago para que algun objeto del windowsform se ejecute apenas se abra el ejecutable? Por ejemplo tengo un listview que cuando se agreguen los textos a cada fila, ya me marque de otro color siempre las filas pares (2-4-6-8-10) y no hasta que le de doble clic a una fila

y otra cosa:

¿Cómo le indico a un textbox que solo acepte caracteres A-Z, a-z, 0-9? Se que tiene que ver con la tabla ASCII pero como lo agrego como código?

Código:
If ListView1.SelectedItems.Count = 0 Then Exit Sub
            For i As Integer = ListView1.SelectedItems.Count - 1 To 0 Step -1

                TBcomments.AppendText(ListView1.SelectedItems(i).Text & vbCrLf & vbCrLf)
            Next
        End If
               For a As Integer = 0 To (NUMERO DE LINEAS) Step 2
                    ListView1.Items(a + 1).ForeColor = System.Drawing.Color.Blue
               Next

Última edición por moradazo; 03/08/2008 a las 01:10 Razón: Resolví una pregunta que hice
  #15 (permalink)  
Antiguo 03/08/2008, 03:05
Colaborador
 
Fecha de Ingreso: enero-2008
Ubicación: Unas veces aquí, otras veces allí
Mensajes: 1.482
Antigüedad: 16 años, 3 meses
Puntos: 37
Respuesta: Visual Basic 2005 - Diccionario

Cita:
Iniciado por moradazo Ver Mensaje
¿Cómo hago para que algun objeto del windowsform se ejecute apenas se abra el ejecutable? Por ejemplo tengo un listview que cuando se agreguen los textos a cada fila, ya me marque de otro color siempre las filas pares (2-4-6-8-10) y no hasta que le de doble clic a una fila

y otra cosa:

¿Cómo le indico a un textbox que solo acepte caracteres A-Z, a-z, 0-9? Se que tiene que ver con la tabla ASCII pero como lo agrego como código?
A la primera pregunta:
Pon el código en el evento Load() del Form

A la segunda: Un ejemplo

Código:
Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
        e.Handled = ValidaText(TextBox1, e.KeyChar)
    End Sub

    Public Function ValidaText(ByVal txtControl As TextBox, ByVal caracter As Char) As Boolean
        If (Char.IsNumber(caracter, 0) = True) Or (Char.IsLetter(caracter) = True) Then
            Return False
        Else
            Return True
        End If
    End Function
  #16 (permalink)  
Antiguo 04/08/2008, 00:40
Avatar de moradazo  
Fecha de Ingreso: julio-2008
Ubicación: [email protected]
Mensajes: 355
Antigüedad: 15 años, 10 meses
Puntos: 2
Respuesta: Visual Basic 2005 - Diccionario

Gracias Avellaneda!
Nada más tengo una consulta:

Vieras que si agregué tu código, inclusive aceptando también signos de puntuación y espacios en blanco, pero lo que aún no me deja hacer es borrar con el botón backspace del teclado, digamos si puse una letra de más y quiero borrarla haciéndome para atrás con el backspace no me va dejar.
Será que cuando va borrar está creando en la cadena un campo null que no admite y por lo tanto no borra? Gracias!

Código:
Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
        e.Handled = ValidaText(TextBox1, e.KeyChar)
    End Sub

Public Function ValidaText(ByVal txtControl As TextBox, ByVal caracter As Char) As Boolean
        If (Char.IsNumber(caracter, 0) = True) Or (Char.IsLetter(caracter) = True) _
         Or (Char.IsPunctuation(caracter) = True) Or _
         (Char.IsWhiteSpace(caracter) = True) Then
            Return False
        Else
            Return True
        End If
    End Function
  #17 (permalink)  
Antiguo 04/08/2008, 01:19
Colaborador
 
Fecha de Ingreso: enero-2008
Ubicación: Unas veces aquí, otras veces allí
Mensajes: 1.482
Antigüedad: 16 años, 3 meses
Puntos: 37
Respuesta: Visual Basic 2005 - Diccionario

Cita:
Iniciado por moradazo Ver Mensaje
Gracias Avellaneda!
Nada más tengo una consulta:

Vieras que si agregué tu código, inclusive aceptando también signos de puntuación y espacios en blanco, pero lo que aún no me deja hacer es borrar con el botón backspace del teclado, digamos si puse una letra de más y quiero borrarla haciéndome para atrás con el backspace no me va dejar.
Será que cuando va borrar está creando en la cadena un campo null que no admite y por lo tanto no borra? Gracias!

Código:
Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
        e.Handled = ValidaText(TextBox1, e.KeyChar)
    End Sub

Public Function ValidaText(ByVal txtControl As TextBox, ByVal caracter As Char) As Boolean
        If (Char.IsNumber(caracter, 0) = True) Or (Char.IsLetter(caracter) = True) _
         Or (Char.IsPunctuation(caracter) = True) Or _
         (Char.IsWhiteSpace(caracter) = True) Then
            Return False
        Else
            Return True
        End If
    End Function
Añade la siguiente condición:

Or Char.IsControl(caracter) = True

  #18 (permalink)  
Antiguo 04/08/2008, 09:29
Avatar de moradazo  
Fecha de Ingreso: julio-2008
Ubicación: [email protected]
Mensajes: 355
Antigüedad: 15 años, 10 meses
Puntos: 2
Respuesta: Visual Basic 2005 - Diccionario

Cita:
Iniciado por Avellaneda Ver Mensaje
Añade la siguiente condición:

Or Char.IsControl(caracter) = True

Muchas gracias Avellaneda, me sirvio de maravilla
  #19 (permalink)  
Antiguo 13/08/2008, 15:55
Avatar de moradazo  
Fecha de Ingreso: julio-2008
Ubicación: [email protected]
Mensajes: 355
Antigüedad: 15 años, 10 meses
Puntos: 2
Respuesta: Visual Basic 2005 - Diccionario

Código PHP:
    Private Function Traducir(ByVal sPalabra As StringByVal Idioma As String) As String
        Dim sb 
As New System.Text.StringBuilder(255)
        
Dim ip As IntPtr Runtime.InteropServices.Marshal.AllocHGlobal(255)
        
Dim bt As Byte GetPrivateProfileSection("Usuarios"ip255"C:\Temp.ini")

        For 
As Integer 0 To bt 1
            sb
.Append(Convert.ToChar(Runtime.InteropServices.Marshal.ReadByte(ipi)))
        
Next
        sb
.Remove(sb.Length 11)
        
Dim Encontrado As Boolean
        Dim sBuscar 
As String ""
        
For Each line As String In sb.ToString().Split(Convert.ToChar(0))
            
Dim iPos As Integer InStr(line",") - 1
            
If Idioma "Ingles" Then
                sBuscar 
= (Microsoft.VisualBasic.Left(lineiPos))
                If 
sBuscar sPalabra Then
                    sBuscar 
= (Microsoft.VisualBasic.Right(lineLen(line) - iPos 1))
                    
Encontrado True
                    
Exit For
                
End If
            Else
                
sBuscar = (Microsoft.VisualBasic.Right(lineLen(line) - iPos 1))
                If 
sBuscar sPalabra Then
                    sBuscar 
= (Microsoft.VisualBasic.Left(lineiPos))
                    
Encontrado True
                    
Exit For
                
End If
            
End If
        
Next
        
If Encontrado False Then sBuscar "No existe en el diccionario"
        
Runtime.InteropServices.Marshal.FreeHGlobal(ip)
        Return 
sBuscar
    End 
Function

Botones

Private Sub InglesAespañol_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles InglesAespañol.Click
        
TextBox2.Text Traducir(TextBox1.Text"Ingles")
    
End Sub

    
Private Sub EspañolAingles_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles EspañolAingles.Click
        
TextBox2.Text Traducir(TextBox1.Text"Español")
    
End Sub 
Gracias al código que me facilitó Avellaneda pude lograr el diccionario, pero necesito ahora que el textbox donde escribo la palabra sea un combobox donde muestre todos los significados en español que tenga el archivo INI. Esto con el fin de que el usuario no se canse de ver el error de que no encuentra la palabra por que no hay muchos significados aun, entonces que mejor vea los que estan, se podra hacer? Gracias
  #20 (permalink)  
Antiguo 13/08/2008, 16:07
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Pregunta Respuesta: Visual Basic 2005 - Diccionario

Pero, ¿cuál sería el formato de tu *.ini en ese caso?
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #21 (permalink)  
Antiguo 13/08/2008, 18:16
Avatar de moradazo  
Fecha de Ingreso: julio-2008
Ubicación: [email protected]
Mensajes: 355
Antigüedad: 15 años, 10 meses
Puntos: 2
De acuerdo Respuesta: Visual Basic 2005 - Diccionario

Cita:
Iniciado por David el Grande Ver Mensaje
Pero, ¿cuál sería el formato de tu *.ini en ese caso?
Bueno la forma de lectura es esta:
Código PHP:
Private Function Traducir(ByVal sPalabra As StringByVal Idioma As String) As String
        Dim sb 
As New System.Text.StringBuilder(255)
        
Dim ip As IntPtr Runtime.InteropServices.Marshal.AllocHGlobal(255)
        
Dim bt As Byte GetPrivateProfileSection("Usuarios"ip255"C:\Temp.ini")

        For 
As Integer 0 To bt 1
            sb
.Append(Convert.ToChar(Runtime.InteropServices.Marshal.ReadByte(ipi)))
        
Next
        sb
.Remove(sb.Length 11)
        
Dim Encontrado As Boolean
        Dim sBuscar 
As String ""
        
For Each line As String In sb.ToString().Split(Convert.ToChar(0))
            
Dim iPos As Integer InStr(line",") - 1
            
If Idioma "Ingles" Then
                sBuscar 
= (Microsoft.VisualBasic.Left(lineiPos))
                If 
sBuscar sPalabra Then
                    sBuscar 
= (Microsoft.VisualBasic.Right(lineLen(line) - iPos 1))
                    
Encontrado True
                    
Exit For
                
End If
            Else
                
sBuscar = (Microsoft.VisualBasic.Right(lineLen(line) - iPos 1))
                If 
sBuscar sPalabra Then
                    sBuscar 
= (Microsoft.VisualBasic.Left(lineiPos))
                    
Encontrado True
                    
Exit For
                
End If
            
End If
        
Next
        
If Encontrado False Then sBuscar "No existe en el diccionario"
        
Runtime.InteropServices.Marshal.FreeHGlobal(ip)
        Return 
sBuscar
    End 
Function

Private 
Sub InglesAespañol_Click(ByVal sender As System.ObjectByVal e As System.EventArgsHandles InglesAespañol.Click
        TextBox2
.Text Traducir(TextBox1.Text"Ingles")
    
End Sub

    
Private Sub EspañolAingles_Click(ByVal sender As System.ObjectByVal e As System.EventArgsHandles EspañolAingles.Click
        TextBox2
.Text Traducir(TextBox1.Text"Español")
    
End Sub 
y el archivo .ini viene así:

[Diccionario]
Silla,Chair
Hola,Hello
Sonido,Sound

Gracias por la ayuda.
  #22 (permalink)  
Antiguo 14/08/2008, 07:42
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Visual Basic 2005 - Diccionario

Ah, ya entendí lo que quieres hacer, es que al principio pensé que eran varias significaciones para una sola palabra.
Bueno, en ese caso fíjate que en el código estamos comparando la palabra buscado con la línea del ini:
Código PHP:
If sBuscar sPalabra Then 
Puedes quitar esa comparación y agregar directamente el dato en el ComboBox .
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:32.