Comment puis-je diff deux fichiers en Perl?
J'ai deux fichiers de texte qui doivent avoir les mêmes valeurs.
$ diff A.txt B.txt
4a5
> I have this extra line.
$
Ouvrir des fichiers Perl
open (ONE, "<A.txt");
open (TWO, "<B.txt");
Comment puis-je faire une telle diff de l'intérieur de Perl? N'Perl ont une fonction intégrée de diff ou dois-je utiliser unix diff
utilitaire? Je ne veux pas mettre en œuvre mon propre algorithme de comparaison pour cela.
J'ai besoin d'informations quant à l'endroit où mes fichiers sont différents, mais je n'ai pas besoin d'utiliser unix diff
utilitaire nécessairement. C'était juste un exemple.
Avez-vous réellement besoin d'un "diff" de sortie ou simplement un signal que les fichiers sont identiques ou pas? Si tout ce que vous voulez faire est de déterminer si les deux fichiers ont le même contenu ligne par ligne, il est assez facile de les lire ligne par ligne en Perl et de comparer les lignes, et à la sortie avec une plainte si une paire de lignes ne correspondent pas.
Baxter: j'ai juste besoin de savoir que les fichiers sont identiques ou pas.
Je suis confus: votre commentaire de brian d foy semble entrer en conflit avec vos autres commentaires. Répéter l'Ira de Baxter question, avez-vous tout simplement besoin de savoir si les fichiers sont différents, ou vous avez besoin de détails concernant comment ils diffèrent.
Dupliquer : Comment puis-je utiliser Perl pour déterminer si le contenu de deux fichiers sont identiques?
J'ai besoin de savoir où ils diffèrent trop, mais je n'ai pas nécessairement besoin d'utiliser le
Baxter: j'ai juste besoin de savoir que les fichiers sont identiques ou pas.
diff
était juste un exemple.Je suis confus: votre commentaire de brian d foy semble entrer en conflit avec vos autres commentaires. Répéter l'Ira de Baxter question, avez-vous tout simplement besoin de savoir si les fichiers sont différents, ou vous avez besoin de détails concernant comment ils diffèrent.
Dupliquer : Comment puis-je utiliser Perl pour déterminer si le contenu de deux fichiers sont identiques?
J'ai besoin de savoir où ils diffèrent trop, mais je n'ai pas nécessairement besoin d'utiliser le
diff
utilitaire, est ce que je voulais dire.OriginalL'auteur Lazer | 2010-08-27
Vous devez vous connecter pour publier un commentaire.
Vous pouvez essayer d'utiliser Texte::Diff
Sinon, l'utilitaire UNIX pourrait être une option.
OriginalL'auteur cubic1271
Si je n'avais besoin de savoir qu'elles étaient les mêmes (c'est à dire pas de découvrir comment ils sont différents), je voudrais utiliser Digest::MD5 pour voir si ils viennent avec la même empreinte. Il y a une extrêmement petite chance que deux fichiers différents peuvent avoir la même somme MD5, alors vous pourriez même essayer de Digest::SHA1.
Si vous voulez savoir quelles lignes sont différentes, alors vous pouvez utiliser Algorithme::Diff, peut-être en collaboration avec Tie::File. Cependant, il y a aussi un diff programme qui vient avec Algorithme::Diff si vous n'avez pas un outil de comparaison sur votre plate-forme cible. Bien que vous pouvez débourser pour que, vous pourriez juste voulez copier ce qu'il fait dans une sous-routine. Texte::Diff est construit sur le haut de Algorithme::Diff, de sorte qu'il peut déjà faire ce que vous voulez.
diff
ed.Et bien, vous devriez le dire. Dans votre commentaire Ira vous dit le contraire.
Il n'y a aucune chance de collision si vous lisez les deux fichiers et de comparer chaque octet. Le hachage est grande pour certaines choses, telles que la comparaison de fichiers sur le réseau (sans envoyer le fichier entier), ou en comparant des milliers de fichiers les uns contre les autres. Pour la comparaison de deux fichiers qui se trouvent sur la même machine (sur le même point dans le temps), quel est l'avantage de hachage?
Eh bien, vous pourriez économiser beaucoup de temps. Disons que vous avez 1000 fichiers. C'est un lot de deux-fichier combinaisons de vérifier. Jamais l'esprit que ces fichiers peuvent être de grande taille. Vous pouvez générer le hachage juste une fois pour chaque fichier et de faire une simple comparaison.
Le hachage solution est évidemment mieux si vous voulez comparer chaque fichier plusieurs fois. Cependant, l'utiliser pour une seule comparaison vous donne toujours le pire des cas, la performance scénario d'avoir à analyser tous les deux fichiers.
OriginalL'auteur brian d foy
Non, Perl ne dispose pas d'une fonction intégrée de "diff". Soit vous utilisez un module externe, ou de l'utilisation de Perl structures de données(tables de hachage, les tableaux, etc) ou de vous créer des descripteurs de fichiers, et de parcourir les fichiers en utilisant le descripteur de fichier (boucle while), de les comparer, ligne par ligne. Cette méthode suppose que vos fichiers sont triés. Un autre pas de façon si élégante est d'appeler le "diff" de Perl, mais je déconseille.
Enfin, si Perl n'est pas une obligation, il suffit d'utiliser la Unix
diff
utilitaire (écrire un script shell).OriginalL'auteur ghostdog74