none
Comparar dos String, ver la diferencia y la posición donde está. RRS feed

  • Pregunta

  • Buenos días ,

    Antes de nada dar las gracias por vuestro apoyo, he estado mirando por el foro y no he visto la respuesta.

    Tengo un datagrill con una serie de valores. De la misma columna tengo que comparar dos valores que son iguales excepto en dos dígitos, y necesito saber la posición de los dígitos diferentes. Ejemplo:

    String1:

    abcdefghijklm01jklmsndorls

    String2:

    abcdefghijklm02jklmsndorls

    Siempre serán iguales excepto el valor que está en negrita. 

    Necesito saber la posición donde está la diferencia. La diferencia no siempre estará en el mismo sitio, puede estar a la izquierda o a la derecha.

    Seguro que es sencillo pero no logro hacerlo.

    Muchas gracias por vuestro apoyo.

    Javier.

    viernes, 3 de junio de 2016 7:14

Respuestas

  • Buenos días. Puedes hacerte una función que reciba dos cadenas de texto y devuelva la posición donde empieza la diferencia:

    Private Function PosicionDiferencia(String1 As String, String2 As String) As Integer
    
        PosicionDiferencia = 0
    
        For n As Integer = 1 To String1.Length
            If n <= String2.Length Then
                If String1.Substring(n - 1, 1) <> String2.Substring(n - 1, 1) Then
                    Return n
                End If
            End If
        Next
    
    End Function
    Ten en cuenta que en tu ejemplo te va a devolver la posición del caracter "1" de la 1ª cadena  ó "2" de la segunda. 


    Saludos, Javier J

    • Marcado como respuesta JaviLin viernes, 3 de junio de 2016 10:36
    • Desmarcado como respuesta JaviLin viernes, 3 de junio de 2016 10:54
    • Marcado como respuesta JaviLin viernes, 3 de junio de 2016 10:59
    viernes, 3 de junio de 2016 7:34
  • ¿Has hecho una función? Estás haciendo un return sin devolver ningún valor.

    Si utilizas las función que te puse solo tienes que llamarla con

    TextBox3.Text = PosicionDiferencia(String1, String2)


    Saludos, Javier J

    • Marcado como respuesta JaviLin viernes, 3 de junio de 2016 10:59
    viernes, 3 de junio de 2016 10:59

Todas las respuestas

  • Buenos días. Puedes hacerte una función que reciba dos cadenas de texto y devuelva la posición donde empieza la diferencia:

    Private Function PosicionDiferencia(String1 As String, String2 As String) As Integer
    
        PosicionDiferencia = 0
    
        For n As Integer = 1 To String1.Length
            If n <= String2.Length Then
                If String1.Substring(n - 1, 1) <> String2.Substring(n - 1, 1) Then
                    Return n
                End If
            End If
        Next
    
    End Function
    Ten en cuenta que en tu ejemplo te va a devolver la posición del caracter "1" de la 1ª cadena  ó "2" de la segunda. 


    Saludos, Javier J

    • Marcado como respuesta JaviLin viernes, 3 de junio de 2016 10:36
    • Desmarcado como respuesta JaviLin viernes, 3 de junio de 2016 10:54
    • Marcado como respuesta JaviLin viernes, 3 de junio de 2016 10:59
    viernes, 3 de junio de 2016 7:34
  • Muchas gracias Javier,

    Con este código me sale el texbox vacío que es el resultado.

    Te paso el código implementado con lo que has comentado.

    Tengo 3 TexBox = String1 String2 y resultado n

     

    '-------------------------------------------------------

            Dim String1 As String
            Dim String2 As String
            String1 = TextBox1.Text
            String2 = TextBox2.Text
            Dim n As Integer
            For n = 1 To String1.Length
                If n <= String2.Length Then
                    If String1.Substring(n - 1, 1) <> String2.Substring(n - 1, 1) Then
                        Return
                    End If
                End If
            Next

            TextBox3.Text = n

    Algo hago mal seguro.... Gracias por tu ayuda.

    Javier.

    • Marcado como respuesta JaviLin viernes, 3 de junio de 2016 10:58
    • Desmarcado como respuesta JaviLin viernes, 3 de junio de 2016 10:58
    viernes, 3 de junio de 2016 10:54
  • ¿Has hecho una función? Estás haciendo un return sin devolver ningún valor.

    Si utilizas las función que te puse solo tienes que llamarla con

    TextBox3.Text = PosicionDiferencia(String1, String2)


    Saludos, Javier J

    • Marcado como respuesta JaviLin viernes, 3 de junio de 2016 10:59
    viernes, 3 de junio de 2016 10:59
  • Tienes razón... error mío, sorry.

    Gracias!!!!

    Javier.

    viernes, 3 de junio de 2016 11:00