Spanish Comparar strings

RAFA BRAVO

Active Member
Licensed User
Longtime User
Buenos días, alguien sabe si existe una función que compare cadenas, y si existen diferencias, devuelva el trozo de cadena que no es igual. Yo lo hago a mi manera, pero quiero saber si existe algo ya. Gracias
 

emexes

Expert
Licensed User
No es exactamente lo que preguntabas, pero... puede que te guste la rutina de comparación que escribí hace años para documentar los cambios entre dos versiones de un fichero fuente:

B4X:
Dim S1 As String = "Now is the time for all good men to come to the aid of the party"
Dim S2 As String = "It was the time for good women to come to the aid of the men too"

Log("S1 = """ & S1 & """")
Log("S2 = """ & S2 & """")
Log("TO GET FROM S1 TO S2:")
WhatChanged(S1, S2)

Sub WhatChanged(S1 As String, S2 As String)
    If S1.Length = 0 And S2.Length = 0 Then
        'nothing to do
    else if S1.Length = 0 Then
        Log("delete """ & S2 & """")
    else if S2.Length = 0 Then
        Log("add """ & S1 & """")
    Else
        For L = S1.Length To 5 Step -1    'less than 5 = just do replacement
            For P1 = 0 To S1.Length - L
                Dim LookFor As String = S1.SubString2(P1, P1 + L)
                Dim P2 As Int = S2.IndexOf(LookFor)
                If P2 >= 0 Then
                    WhatChanged(S1.SubString2(0, P1), S2.SubString2(0, P2))
                    Log("keep """ & LookFor & """")
                    WhatChanged(S1.SubString(P1 + L), S2.SubString(P2 + L))
                    Return
                End If
            Next
        Next
        Log("replace """ & S1 & """ with """ & S2 & """")
    End If
End Sub
Log output:
Waiting for debugger to connect...
Program started.
S1 = "Now is the time for all good men to come to the aid of the party"
S2 = "It was the time for good women to come to the aid of the men too"
TO GET FROM S1 TO S2:
replace "Now i" with "It wa"
keep "s the time for "
replace "all good " with "good wo"
keep "men to come to the aid of the "
replace "party" with "men too"

(excepto que comparaba línea por línea en lugar de carácter por carácter)
 
Last edited:

emexes

Expert
Licensed User
Lo siento, olvidé que estamos hablando Español 🍻:

Log output:
Waiting for debugger to connect...
Program started.
S1 = "Ahora es el momento de que todos los hombres de bien acudan en ayuda de la fiesta"
S2 = "También era el momento de que las mujeres de bien acudieran en ayuda de los hombres"
TO GET FROM S1 TO S2:
replace "Ahora es" with "También era"
keep " el momento de que "
replace "todos los homb" with "las muje"
keep "res de bien acud"
delete "ier"
keep "an en ayuda de l"
replace "a fiesta" with "os hombres"
 
Last edited:

emexes

Expert
Licensed User
1709425677024.png


Pensé que podría gustarte. 🍻

Fue escrito el siglo pasado, después de seis meses de usar la utilidad DOS de comparación de archivos y pensar que podría ser mucho mejor.

Me llevó medio día dar con ese precioso algoritmo. Estoy seguro de que no fui el primero en hacerlo, pero esto fue en los días antes de que internet estuviera disponible públicamente, y definitivamente fue todo creación mía.

De hecho, ahora que tengo los libros de Knuth El arte de programar ordenadores, echaré un vistazo a ver qué tiene que decir sobre comparar textos. Lol. Sólo entiendo la mitad de lo que escribe, pero esa mitad es oro puro, así que es de suponer que la otra mitad también lo es.
 
Last edited:

RAFA BRAVO

Active Member
Licensed User
Longtime User
Muchas gracias, probare de adaptarlo a lo que necesito. Tiene buena pinta
 

josejad

Expert
Licensed User
Longtime User
Bueno, aquí siempre se ha dicho (aunque no es exacto) que Australia son nuestras antípodas. Si empezamos a cavar cada uno por un lado lo mismo podemos unir las dos Sevillas y tomarnos algo a mitad de camino (evitando el núcleo de la Tierra, que ya en esta Sevilla hace bastante calor).

Perdón al OP (@RAFA BRAVO) por el offtopic.
 
Top