Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[INFO] Comparer deux fichiers texte avec PowerShell

8 réponses
Avatar
Jacques Barathon [MS]
Hello,

Pour info, je viens de publier sur mon blog un script PowerShell qui permet
de comparer deux fichiers texte et d'obtenir la liste des différences ligne
par ligne.

http://janel.spaces.live.com/blog/cns!9B5AA3F6FA0088C2!345.entry

Je suis preneur de tout feedback!

Jacques

8 réponses

Avatar
MCI \(ex do ré Mi chel la si do\) [MVP]
Bonsoir !


Ci-dessous, un batch (OK, il est super-compliqué), pour comparer deux fichiers texte.

Ce script affiche les lignes qui sont différentes, avec les numéros de lignes, et avec, pour
chacune, la ligne précédente et la ligne suivante (pour avoir une meilleure visibilité du contexte).

Certes, ce batch est un très mauvais exemple pour apprendre PowerShell ; certes, il est sans doute
beaucoup plus difficile à comprendre (surtout pour des powershellophiles).

Le code-source :

fc /L /N %1 %2



@-salutations

Michel Claveau



Au fait, j'ai commencé à re-écrire un site sur le Batch. Il n'est pas fini, mais est déjà
regardable.
C'est là : http://ponx.org/ponx/batch
Avatar
moi
Notre ami MCI (ex do ré Mi chel la si do) [MVP] tapota :

Bonsoir !


Ci-dessous, un batch (OK, il est super-compliqué), pour comparer
deux
fichiers texte.

Le code-source :

fc /L /N %1 %2



;o)

Enfin une source qui ne craint pas
les coupures intempestives de lignes
dues aux lecteurs de news ;o))))

A+

HB

Avatar
Jacques Barathon [MS]
"MCI (ex do ré Mi chel la si do) [MVP]"
wrote in message news:
Bonsoir !


Ci-dessous, un batch (OK, il est super-compliqué), pour comparer deux
fichiers texte.

Ce script affiche les lignes qui sont différentes, avec les numéros de
lignes, et avec, pour chacune, la ligne précédente et la ligne suivante
(pour avoir une meilleure visibilité du contexte).

Certes, ce batch est un très mauvais exemple pour apprendre PowerShell ;
certes, il est sans doute beaucoup plus difficile à comprendre (surtout
pour des powershellophiles).

Le code-source :

fc /L /N %1 %2



Excellent, merci Michel pour ce rafraichissant retour aux racines! :-)

Cependant, si tu m'as fait l'honneur de lire mon blog, tu auras noté que la
commande fc n'a pas les fonctionnalités de base de mon script et qui étaient
la raison première de son écriture:

- comptage du nombre de caractères différents
- récupération des caractères différents et de leur position dans un tableau

Cela dit, tu as bien fait de me rappeler l'existence de fc:

- son utilisation reste possible à partir de PowerShell
- certaines fonctionnalités sont intéressantes, je les intégrerai dans une
prochaine version de mon script :-)

Jacques

Avatar
MCI \(ex do ré Mi chel la si do\) [MVP]
Salut, Jacques !

fc n'a pas les fonctionnalités de base de mon script


Et, surtout, fc n'apprend rien ; alors que ton script peut être très utile, pour se former à
PowerShell.

Sinon, il y a une fonctionnalité de fc assez intéressante, que tu n'as pas (encore ?) reprise dans
ton script : si un des deux fichiers comparés a une ligne de plus que l'autre, fc est capable de la
voir, et continue la comparaison avec tenant compte du décalage de lignes. Alors que ton script va
considérer toutes les lignes, au-delà de la ligne supplémentaire, comme différentes.

(pour fc, le paramètre pour définir le nb maxi de lignes de décalage, c'est /LBx)

@-salutations

Michel Claveau



PS : désolé pour le piège, ce genre de truc étant un vrai casse-tête à programmer...

Avatar
Jacques Barathon [MS]
"MCI (ex do ré Mi chel la si do) [MVP]"
wrote in message news:
Salut, Jacques !

fc n'a pas les fonctionnalités de base de mon script


Et, surtout, fc n'apprend rien ; alors que ton script peut être très
utile, pour se former à PowerShell.

Sinon, il y a une fonctionnalité de fc assez intéressante, que tu n'as pas
(encore ?) reprise dans ton script : si un des deux fichiers comparés a
une ligne de plus que l'autre, fc est capable de la voir, et continue la
comparaison avec tenant compte du décalage de lignes. Alors que ton script
va considérer toutes les lignes, au-delà de la ligne supplémentaire, comme
différentes.

(pour fc, le paramètre pour définir le nb maxi de lignes de décalage,
c'est /LBx)


Si tu as l'occasion, tu pourras me donner un exemple d'utilisation? Je viens
d'essayer avec deux fichiers au départ identiques, sur l'un des deux j'ai
introduit une ligne vierge au milieu, et fc fic1.txt fic2.txt /u /n /lb1 me
dit que la resynchronisation a échoué parce que les fichiers sont trop
différents. J'ai également essayé de ne pas provoquer de décalage en me
contentant de remplacer une ligne par une autre, même message. Il faut que
je monte à /lb3 pour que le message d'erreur disparaisse. Curieux, alors
qu'il n'y a qu'une ligne de différente et même aucun décalage de ligne dans
mon deuxième exemple !

Jacques


Avatar
|-| /-\\ |_ \(\)7 [°¿°]
Bonsoir !

Pas forcément besoin de définir /LB
La valeur par défaut suffit, la plupart du temps.

Exemple :

Fichier aaa.txt :

aaa
bbb
ccc
ddd
eee
11
22
33
44
55
66
77
88
99

Fichier bbb.txt :

aaa
bbb
cccC
ddd
eee
11
11bis
22
33
44
555
66
77
88
99

Commande : fc /N aaa.txt bbb.txt


Autre chose, j'ai cité ton blog dans le paragraphe sur Powershell de mon site Batch. Pas de problème
?


@-salutations

Michel Claveau
Avatar
Jacques Barathon [MS]
"|-| /- |_ ()7 [°¿°]" wrote in message
news:471a57aa$0$27409$
Bonsoir !

Pas forcément besoin de définir /LB
La valeur par défaut suffit, la plupart du temps.


C'est ce que j'ai vu, en effet. Ca marche même mieux sans qu'avec
d'ailleurs, en tout cas dans l'exemple que j'ai essayé.

Autre chose, j'ai cité ton blog dans le paragraphe sur Powershell de mon
site Batch. Pas de problème ?


Non, pas de problème, c'est fait pour ça. Désolé pour nybble, mais c'était
justement ma confrontation avec la culture américaine qui m'avait fait
écrire ce billet. :-)

Très bonne idée, ton site. J'ai juste relevé une erreur dans le nom d'un
utilitaire (à moins que ce soit une version que je ne connais pas):
robotcopy.exe. L'outil que je connais s'appelle robocopy.exe, sans le 't'.

Jacques

Avatar
|-| /-\\ |_ \(\)7 [°¿°]
Bonsoir !


une erreur : le nom robotcopy.exe. L'outil que je connais s'appelle robocopy.exe


Corrigé. Merci.


@+

MCI