Si ha estado escribiendo JSL por un tiempo, probablemente haya guardado varias copias de su script y eventualmente se haya preguntado acerca de las diferencias entre los scripts. No existe una buena manera de responder la pregunta integrada en Windows, así que aquí hay una manera de hacerlo en JSL, usando el Guión de edición más corto función (que hace casi todo el trabajo).
CompareTextFiles = Function( {pathA, pathB},
{textA, textB, v, gray, red, green, ipart, parts, kind, text, vv, bb},
textA = Load Text File( pathA );
textB = Load Text File( pathB );
parts = Shortest Edit Script( lines( textA, textB, ignorewhitespace() ) );
v = V List Box();
gray = RGB Color( .9, .9, .9 );
red = RGB Color( 1, .7, .7 );
green = RGB Color( .7, 1, .7 );
For( ipart = 1, ipart <= N Items( parts ), ipart += 1,
{kind, text} = parts[ipart];
bb = MouseBox(
Border Box( Left( 10 ), Right( 100 ),
// trim removes a final CR that double spaces the joint
// between text boxes in the vlistbox. the 3 spaces added
// back hides a rendering error that clips the last chars
// in a line...sometimes.
Text Box( Trim( text, right ) || " ", <<SETWRAP></SETWRAP>La función espera dos nombres de archivo y devuelve un cuadro vlist adecuado para incrustarlo en una ventana. El cuadro vlist contiene un montón de cuadros de texto dibujados sobre un fondo gris, rojo o verde. El script de edición devuelto por la función de script de edición más corto es una lista de comandos: mantener datos común a ambas cuerdas (gris), borrar datos de la primera cadena (rojo), insertar datos de la segunda cadena (verde). Usando solo esos tres comandos, el script es "un" (no "el") script más corto posible para convertir la cadena A en la cadena B.
MouseBox agrega información sobre herramientas a las secciones roja y verde que explica qué archivo perdió esos datos o agregó esos datos.
El Guión de edición más corto tiene algunos otros parámetros (no utilizados aquí) que serán útiles para archivos más largos, especialmente el límite parámetro. Al establecer un límite razonable de 500 o 1000 diferencias, puede simplemente decir "estos archivos son realmente diferentes" sin perder demasiado tiempo esperando un proceso de coincidencia realmente lento que probablemente no produzca resultados interesantes. La función se llama con el Ignorar espacios en blanco parámetro porque no me interesan las líneas que tienen sangrías diferentes.
Two versions of Jabberwocky downloaded from the webTwo versions of Jabberwocky downloaded from the webTwo versions of Jabberwocky downloaded from the webTwo versions of Jabberwocky downloaded from the webDos versiones de Jabberwocky descargadas de la web
Al menos una de esas versiones fue modificada con respecto al original.
Guión adjunto.