Si vous écrivez du JSL depuis un certain temps, vous avez probablement enregistré plusieurs copies de votre script et vous vous êtes finalement interrogé sur les différences entre les scripts. Il n'existe pas de moyen efficace de répondre à la question intégré à Windows, voici donc un moyen de le faire en JSL, en utilisant le Script d'édition le plus court fonction (qui fait presque tout le travail).
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 fonction attend deux noms de fichiers et renvoie une boîte de liste virtuelle adaptée à l'intégration dans une fenêtre. La zone vlist contient un ensemble de zones de texte dessinées sur un fond gris, rouge ou vert. Le script d'édition renvoyé par la fonction Shortest Edit Script est une liste de commandes : conserver les données commun aux deux cordes (gris), supprimer les données de la première chaîne (rouge), insérer données de la deuxième chaîne (verte). En utilisant uniquement ces trois commandes, le script est "un" (et non "le") script le plus court possible pour convertir la chaîne A en chaîne B.
La MouseBox ajoute une info-bulle aux sections rouge et verte expliquant quel fichier a perdu ces données ou a ajouté ces données.
Le Script d'édition le plus court possède d'autres paramètres (non utilisés ici) qui seront utiles pour les fichiers plus longs, en particulier le limite paramètre. En fixant une limite raisonnable de 500 ou 1 000 différences, vous pouvez simplement dire « ces fichiers sont vraiment différents » sans passer trop de temps à attendre un processus de correspondance très lent et peu susceptible de produire des résultats intéressants. La fonction est appelée avec le Ignorer les espaces blancs paramètre car je ne suis pas intéressé par les lignes qui sont indentées différemment.
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 webDeux versions de Jabberwocky téléchargées sur le Web
Au moins une de ces versions a été modifiée par rapport à l'original.
Script ci-joint.