Fichiers texte en perl
Fermé
bezoindaidde
Messages postés
3
Date d'inscription
dimanche 18 février 2007
Statut
Membre
Dernière intervention
19 février 2007
-
18 févr. 2007 à 23:46
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 - 19 févr. 2007 à 20:15
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 - 19 févr. 2007 à 20:15
A voir également:
- Fichiers texte en perl
- Transcription audio en texte word gratuit - Guide
- Renommer plusieurs fichiers en même temps - Guide
- Excel cellule couleur si condition texte - Guide
- Wetransfer gratuit fichiers lourd - Guide
- Mettre un texte en majuscule - Guide
4 réponses
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
19 févr. 2007 à 20:15
19 févr. 2007 à 20:15
On peut travailler avec de tables de hachages (hash) et tableau quand il s'agit de petits fichiers
En revanche quand on traite des gros fichiers il faut penser à la mémoire disponible
Voilà un exemple
J'ai 2 fichiers dont un est l'autre à l'envers. Ce qui veut dire que les fichiers ne sont pas identiques.
Dans le 1er script je n'utilise pas de tableaux, en revanche j'utilise de handles de fichiers dans lequels je vais écrire les différences si c'est le cas sinon je vais afficher un messsage
Le script
Dans le 2ème script je sauvegarde les differences dans 2 tableaux.
Le script 2
Execution de 1er script (donc sans tableaux)
En revanche quand on traite des gros fichiers il faut penser à la mémoire disponible
Voilà un exemple
J'ai 2 fichiers dont un est l'autre à l'envers. Ce qui veut dire que les fichiers ne sont pas identiques.
Dans le 1er script je n'utilise pas de tableaux, en revanche j'utilise de handles de fichiers dans lequels je vais écrire les différences si c'est le cas sinon je vais afficher un messsage
Le script
$ cat comparefic2.pl #!/usr/bin/perl # use strict;use warnings; # ouverture de fichiers en lecture open F_LIRE1,"fic1" or die "E/S : $!\n"; open F_LIRE2,"fic2" or die "E/S : $!\n"; open F_A,">>fic1diff" or die "E/S : $!\n"; open F_B,">>fic2diff" or die "E/S : $!\n"; # $f1 lit les ligne dans le 1er fichier # $f2 dans le 2ème my ($f1,$f2); my $i=0; # lecture des fichiers ligne par ligne # avant de paser à la ligne suivante on compare les lignes # si les lignes ne sont pas identiques # j'écris dans les fichiers correspondants while ( defined($f1=<F_LIRE1>) and defined($f2=<F_LIRE2>) ){ chomp($f1); # suppression de caractère de fin de ligne chomp($f2); ( (print F_A "$f1\n"), (print F_B "$f2\n"), ++$i )unless $f1 eq $f2; } if ($i == 0){ print "Les fichiers sont identiques.\n"; unlink <fic*diff>; }else{ print "Les fichiers ne sont pas identiques.\n"; print "-fichier fic1diff :les lignes se trouvant que dans fic1\n"; print "-fichier fic2diff :les lignes se trouvant que dans fic2\n"; } __END__
Dans le 2ème script je sauvegarde les differences dans 2 tableaux.
Le script 2
#!/usr/bin/perl # use strict;use warnings; # ouverture de fichiers en lecture open F_LIRE1,"fic1" or die "E/S : $!\n"; open F_LIRE2,"fic2" or die "E/S : $!\n"; # $f1 lit les ligne dans le 1er fichier # $f2 dans le 2ème my ($f1,$f2); # @A - tableau qui contiendra les lignes existantes que dans le 1er fichier # @B - que dans le 2ème fichier my (@A,@B); # lecture des fichiers ligne par ligne # avant de paser à la ligne suivante on compare les lignes # si les lignes ne sont pas identiques # $f1 est ajouté à @A et $f2 est ajouté à @B while ( defined($f1=<F_LIRE1>) and defined($f2=<F_LIRE2>) ){ chomp($f1); # suppression de caractère de fin de ligne chomp($f2); ( (push @A,$f1), (push @B,$f2) ) unless $f1 eq $f2; } if ((@A+@B) ==0){ # si la somme des elements de @A et @B est 0 print "Les fichiers sont identiques.\n"; }else{ print "Les fichiers ne sont pas identiques\n"; } __END__Et voilà l'exécution (à étudier avec attention :-))
Execution de 1er script (donc sans tableaux)
lami20j@debian:~/trash$ time perl comparefic2.pl Les fichiers ne sont pas identiques. -fichier fic1diff :les lignes se trouvant que dans fic1 -fichier fic2diff :les lignes se trouvant que dans fic2 real 0m13.764s user 0m6.664s sys 0m1.140sExecution de 2ème script (j'ai du l'arrêter avec CTRL+C)
lami20j@debian:~/trash$ time perl comparefic.pl Les fichiers ne sont pas identiques real 3m42.216s user 0m7.760s sys 0m2.036sEt voilà la taille et les nombre de lignes de chaque fichier
lami20j@debian:~/trash$ du -h fic1 54M fic1 lami20j@debian:~/trash$ du -h fic2 54M fic2 lami20j@debian:~/trash$ du -h fic1diff 53M fic1diff lami20j@debian:~/trash$ du -h fic2diff 53M fic2diff lami20j@debian:~/trash$ cat fic1 | wc -l 2184192 lami20j@debian:~/trash$ cat fic2 | wc -l 2184192 lami20j@debian:~/trash$ cat fic1diff | wc -l 2101248 lami20j@debian:~/trash$ cat fic2diff | wc -l 2101248A toi de voir
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
19 févr. 2007 à 11:11
19 févr. 2007 à 11:11
Salut,
j'ai besoin de tes fichiers (dans mon profil tu as mon mail)
et aussi de ce que tu veux obtenir comme résultat
- juste oui ou non
- les éléments qui sont en A et ne sont pas en B
- les éléments qui sont en B et ne sont pas en A
etc.
j'ai besoin de tes fichiers (dans mon profil tu as mon mail)
et aussi de ce que tu veux obtenir comme résultat
- juste oui ou non
- les éléments qui sont en A et ne sont pas en B
- les éléments qui sont en B et ne sont pas en A
etc.
bezoindaidde
Messages postés
3
Date d'inscription
dimanche 18 février 2007
Statut
Membre
Dernière intervention
19 février 2007
1
19 févr. 2007 à 11:39
19 févr. 2007 à 11:39
je veux voir si le contenu qui est dans le fichier A,est le même qui est dans le fichier B.
autre possiblité: extraire ce qu'il y a en commun ds A et B, et, dans un autre fichier texte , ce qu'il y a dans l'un , et pas dans l'autre.
bon c juste une idée.
Pr l'exemple, tu peux prendre n'importe kel fichier texte(bcp de lignes, c tout).
merci
autre possiblité: extraire ce qu'il y a en commun ds A et B, et, dans un autre fichier texte , ce qu'il y a dans l'un , et pas dans l'autre.
bon c juste une idée.
Pr l'exemple, tu peux prendre n'importe kel fichier texte(bcp de lignes, c tout).
merci
bezoindaidde
Messages postés
3
Date d'inscription
dimanche 18 février 2007
Statut
Membre
Dernière intervention
19 février 2007
1
19 févr. 2007 à 11:42
19 févr. 2007 à 11:42
si on y intègre la notion des tables de hachage, ca serait bien.
i'm a débutant en perl!
i'm a débutant en perl!