VBWinDiff : Interface d'options pour le
comparateur WinDiff (et WinMerge)
https://github.com/PatriceDargenton/VBWinDiff
Ancien dépôt : https://codes-sources.commentcamarche.net/source/52370
Documentation : VBWinDiff.html
Code source : VBWinDiff.vbproj.html
http://patrice.dargenton.free.fr/CodesSources/index.html
Version 1.13 du 04/08/2024
VBWinDiff permet d'ajouter des options utiles pour le
comparateur de fichier texte WinDiff, ainsi que WinMerge :
l'idée, c'est d'effectuer un prétraitement des fichiers textes à comparer, de
façon à ignorer des détails qui surchargent la comparaison via WinDiff ou WinMerge. Exemple : si vous avez des espaces
insécables dans un fichier et pas dans l'autre, WinDiff vous affiche des tas de
différences qui ne vous intéressent sans doute pas. De même pour la casse
(majuscule/minuscule), les accents, la ponctuation. Il reste cependant des
limitations : si les phrases sont trop longues, ou bien s'il y a un retour
à la ligne dans une phrase, la détection ne fonctionne plus. Du coup, il y a
une option permettant la comparaison mot à mot : WinDiff retrouve alors
l'ensemble des différences sans ternir compte de la ponctuation, seulement des
mots, ce qui est utile par exemple pour comparer deux versions d'un texte.
Si le texte
est trop long, le temps de comparaison explose avec WinDiff (en mode mot à
mot), du coup j'ai ajouté une pagination, par page de 100 Ko. Cela évite le
plantage donc, mais si les tailles des deux documents divergent un peu, la
divergence s'accentue de page en page. On pourrait améliorer un peu la
pagination au prorata de la longueur des deux fichiers (au lieu d'une taille
unique pour les deux fichiers), mais la limitation vient essentiellement de
WinDiff. Sur CodeProject,
il y a eu un concourt en 2009 pour concevoir le meilleur algorithme de
comparaison de fichier texte, mais il n'y avait pas d'interface graphique (GUI)
comme WinDiff au programme : dommage ! (c'est un peu ballot tout de
même).
Aussi je lance
un appel à ceux qui auraient un lien au sujet d'une interface aussi simple que
WinDiff (avec ou sans le code source en DotNet), pour
un algo. aussi performant
que ceux du concourt de CodeProject.
Table des matières
Version
1.01 du 10/10/2010 : Première version
Placer un
raccourci vers VBWinDiff.exe dans le dossier SendTo
de Windows (droit admin. requis), et envoyer deux
fichiers à comparer vers VBWinDiff via l'explorateur de fichier de Windows.
Chemin du dossier
SendTo depuis Windows XP :
"C :\Documents and Settings\[MonCompte]\SendTo"
Chemin du
dossier SendTo pour Windows Vista :
"C :\Documents and
Settings\[MonCompte]\Application
Data\Microsoft\Windows\SendTo"
Chemin du
dossier SendTo depuis Windows 7 et supérieurs :
"C :\Users\[MonCompte]\AppData\Roaming\Microsoft\Windows\SendTo"
Note : si vous lancez VBWinDiff sans argument,
VBWinDiff se chargera de gérer ce raccourci : installation /
désinstallation.
Ratio de
pagination : c'est
une option pour paginer en considérant que les textes ont un contenu identique,
même s'ils ne sont pas de la même longueur : soit la différence de taille
est due par exemple à la présence de sauts de lignes à chaque ligne dans l'un
des deux fichiers (dans ce cas appliquer le ratio), soit l'un des textes a du
contenu en plus ; dans ce cas, soit se contenu est à la fin, soit on ne
sait pas, et alors dans ce cas il peut être utile aussi d'appliquer un ratio.
Comparaison
mot à mot : Si
vous devez comparer deux textes dont l'un a des retours à la ligne intempestif,
il faut alors tenter une comparaison mot à mot (sans la ponctuation, ni les
phrases, juste les mots successifs au "kilomètre"). Si en plus la
césure des mots a été appliquée, VBWinDiff peut alors corriger automatiquement
ces mots coupés sur une base statistique : si le mot recollé est plus
fréquent que la somme des tronçons, alors c'est une césure probable que l'on
peut donc corriger. Dans ce mode, la taille des fichiers après traitement est
affichée aussi, pour donner une idée de la similitude des deux documents. Pour
activer cette option, décocher l'option Paragraphe.
- WinDiff
ne gère pas l'unicode (par exemple les caractères accentués son difficiles à
lire) ;
- En mode
mot à mot, WinDiff ne compare rapidement que des fichiers de moins de 100 Ko
(sinon vous pouvez attendre longtemps, longtemps...) ;
- WinDiff
ne gère pas les sauts de lignes dans une phrase (par exemple si l'un des
fichiers provient d'un copié/collé via un fichier pdf) : les phrases ne
sont plus détectées comme identiques, on est obligé de découper tous les mots
pour que WinDiff puisse retrouver les différences.
- Comparaison
phonétique (voir liens à la fin), comparaison des mots clés (voir VBTextFinder) ;
- Menu
contextuel pour tous les fichiers (plus besoin du menu SendTo),
comme WinMerge.
https://github.com/PatriceDargenton/VBWinDiff/blob/master/Changelog.md
- Gestion
de l'encodage des fichiers, utilisation de cette
technique ;
- Sablier,
en cas de traitement long.
- Si une
phrase ne contient qu'un " alors ignorer ;
- Ne pas
ignorer la casse si on ne le demande pas.
- Correction
de la normalisation des guillemets « ».
- Cohérence
améliorée de l'interface ;
- Correction
de la fonction pour enlever les accents et les lettres collées (œ et æ) :
cela ne fonctionnait pas avec æ, on perdait le e collé, utilisation d'une
technique alternative qui fonctionne bien ;
- Passage
de DotNet 2.0 -> 4.5.2.
- Possibilité
d'ignorer les numériques (n° de page, ...).
- Possibilité
d'ignorer les sauts de ligne multiples : si on décoche Espaces, alors
supprimer aussi les sauts de ligne multiples.
- Gestion
des guillemets “ ” ;
- Correction
des couleurs de boutons qui apparaissent noir sous Windows 7 ;
- Pagination
uniquement pour WinDiff (pas besoin pour WinMerge) ;
- Passage
en VB 2013.
- Nettoyage
des fichiers temporaire avant chaque comparaison ;
- Option
pour utiliser WinMerge à la place de WinDiff, le cas
échéant (décocher WinDiff) ;
- Option
pour ignorer les espaces en début et fin de paragraphe ;
- Option
pour normaliser les quotes (apostrophes) ;
- Mode
pour ignorer les paragraphes (comparaison entre deux textes dont l'un a des
retours à la ligne intempestifs), avec recollage des mots fréquents avec une
césure ;
- Correction
pagination : elle était parfois encore active après avoir décoché.
- Ajout
d'une option Ratio pour paginer en considérant que les textes ont un contenu
identique, même s'ils ne sont pas de la même longueur ;
- Correction
de la pagination (on a maintenant une précision exacte lors d'un changement de
page, car on pagine entièrement les documents avant toute opération) ;
- Correction
de la cohérence des options ;
- Afficher
page 1/n dès la page 1 si demandé ;
- Passage
en VB 2010 (mais le fichier VBWinDiff.vbproj peut
encore s'ouvrir avec VB 2008).
- Pagination :
utile seulement lors de la comparaison mot à mot, dans le cas des phrases
entières, la taille du document ne pose pas de problème ;
- La
détection des espaces insécables ne fonctionne que si l'on conserve la
ponctuation ;
- Pages 2
et suivantes : ne pas afficher infos si pas demandé ;
- Case à
cocher pour lancer WinDiff ou pas, pour paginer ou pas, cohérences des options
au départ (Phrases doit être coché au démarrage).
- Gestion
du raccourci SendTo VBWinDiff :
installation / désinstallation.
- DBComp : le comparateur de structure de base de données
Access (ou ODBC) avec WinDiff
Code source : DBComp.vbp.html
- DBReport : DataBase Reporting tool
for DataBase Administrator
Code source : DBReport.vbproj.html
- WinDiff : version 5.2.3790.0 du 24/03/2003 livrée avec Windows 2003 (Microsoft Source Code Samples).
- WinMerge : un outil Open Source pour comparer des fichiers et dossiers comme WinDiff.
- Concourt sur un WinDiff like : Code Lean and Mean (pas de GUI pour le moment ?)
www.codeproject.com/script/Awards/View.aspx?cid=358
- A Generic - Reusable Diff Algorithm in C#
(longueur des phrases limitées à 1024 caractères, ergonomie à revoir)
www.codeproject.com/Articles/6796/A-Generic-Reusable-Diff-Algorithm-in-C
A Generic, Reusable Diff Algorithm in C# - II
www.codeproject.com/KB/recipes/diffengine.aspx
- Registry Export File (.reg)
Parser
www.codeproject.com/Articles/125573/Registry-Export-File-reg-Parser
- A better front end to WinDiff
www.codeproject.com/Articles/779/A-better-front-end-to-WinDiff
- Soundex
Implementation in C# and VB.NET
A simple soundex implementation
in C# and VB.NET to recognize phonetically similar words based on basic soundex algorithms
www.codeproject.com/KB/aspnet/Soundex.aspx
- Implement Phonetic ("Sounds-like") Name Searches with Double Metaphone Part V: .NET Implementation
www.codeproject.com/Articles/4624/Implement-Phonetic-quot-Sounds-like-quot-Name-Sear
- Algorithme Soundex
www.csharpfr.com/code.aspx?ID=39423