#!/usr/bin/perl -w
# remd: ce script perl va faire une copie(a) d'un fichier(A).
# Il triera(a) puis refera la même chose sur un autre fichier(B).
# Il comparera les deux fichier (a) et (b) pour créer un
fichier(c)
# qui contiendra toute les lignes de (a) qui n'appartienent pas
à (b)
# et toutes les lignes de (b) qui n'appartienent pas à (a).
Il triera le tout
# pour en faire un ficher(C) quil renomera du nom du fichier(A).
# Il tourne bien et fait bien plus que ca, je suis content. 18:33
25 janvier 2002
# alain Adelmar
$dt = localtime(time);
$q =~ /^q|quit/;
@c = <F3>; #assignation de @c
print "Voici un script qui va vous permettre de mettre à
jour 2 fichiers, il triera et effacera les doublons\npour ne garder que
les lignes originales des deux fichier.\nPour continuer taper <Enter\>\tpour
quitter tapez q:\n";
$quitte = <STDIN>;
chomp $quitte;
if ($quitte eq $q) {
print "tchao!!!";
system '/bin/clear';
END;
}
print "Indiquer quel fichier vous voulez updater en premier\n";
$f1 = <STDIN>;
chomp $f1;
until (-e $f1) {
print "le nom de fichier complet $f1 n'existe pas veuillez
le re-enter:\n";
$f1 = <STDIN>;
chomp $f1;
}
# ouverture lecture du premier fichier
open F1, "$f1" or die "ouverture impossible de $f1 $!";
@contenu1 = <F1>;
close F1 || die "fermeture impossible $!";
# copier le contenu trier dans un fichier d'echange (cop_file1)
$cf1 = "copi_" . "$f1";
open CF1, ">$cf1" or die "création du fichier d\'echange
$cf1 impossible $!";
@nw1 = sort @contenu1;
print CF1 @nw1;
#close CF1 || die "Fermeture de $cf1 compromise $!";
#-- pareil avec le 2éme-----placer ceci et au-dessus dans une seule routine.
print "Indiquer le nom du second fichier vous voulez updater\n";
$f2 = <STDIN>;
chomp $f2;
until (-e $f2) {
print "le nom de fichier complet $f1 n'existe pas veuillez
le re-enter:\n";
$f2 = <STDIN>;
chomp $f2;
}
# ouverture lecture du second fichier
open F2, "$f2" or die "ouverture impossible de $f2 $!";
@contenu2 = <F2>;
close F2 || die "fermeture impossible $!";
# copier le contenu trier dans un fichier d'echange (cop_file1)
$cf2 = "copi_" . "$f2";
open CF2, ">$cf2" or die "création du fichier d\'echange
$cf2 impossible $!";
@nw2 = sort @contenu2;
print CF2 @nw2;
#close CF2 || die "Fermeture de $cf2 compromise $!";
# on peut eviter de tout écrire dans des fichiers différant
mais bon....
# on propose un nom pour l'update(C) de A et B. (la aussi on peut
faire +simple)
($racine1, $ext1) = split(/\./, $f1);
($racine2, $ext2) = split(/\./, $f2);
if (defined $ext1) {
$choix1 = "$racine1_" . "$dt\." . "$ext1";
}
else {
$choix1 = "$racine1_" . "$dt";
}
if (defined $ext2) {
$choix2 = "$racine2_" . "$dt\." . "$ext2";
}
else {
$choix2 = "$racine2_" . "$dt";
}
$choix3 = "update_" . "$dt\." . "$racine1";
#++++++++++++++++++++++++++++++++ tout le travail tien là
# Il vaut mieux faire un hachage par mot anglais de @c (somme de
@a et @b).
# En profiter pour prendre les traductions les + longues
foreach $ligne(@nw1, @nw2) {
next if ($ligne =~ /""/);
next if ($ligne =~ /^[A-Z]/);
if ($ligne =~ /\w\,\w/) {
($ma, $trad)= split(/\,/,$ligne);
print "mot anglais: $ma = $trad\n";
#test pour controler les données du futur hashage
$hpma{$ma}= $trad;
$f1h{$ligne}++;
}
next if ($ligne =~ /(ed|ing|ness|ty|ly)$/);
$f2h{$ligne}++;
}
foreach $ma (keys %hpma) {
$lg = "$ma," . $hpma{$ma};
print "$lg\n";
push @d, $lg;
}
$fx = "test_U2F.log";
open FX, ">$fx" or die "ouverture de $fx impossible $!";
@d = (sort @d);
print FX @d;
close FX or die "fermeture impossible $!";
foreach $ligne (keys %f1h) {
push @c, $ligne;
}
foreach $ligne (keys %f2h) {
push @e, $ligne;
}
$fe = "up_better.log";
open FE, ">$fe" or die "ouverture de $fe impossible $!";
@e = (sort @e);
print FE @e;
close FE or die "fermeture de $fe impossible $!";
@c = (sort @c); # tant qu'a
faire
#+++++++++++++++++++++++++++++++++
close CF1 || die "Fermeture de $cf1 compromise $!";
close CF2 || die "Fermeture de $cf2 compromise $!";
print "Quel nom voulez vous donner au fichier updaté:\n(1)\t$choix1\n(2)\t$choix2\n(3)\t$choix3(par
defaut)\nNota:Ce fichier ne remplacera pas $f1 ou $f2 sans votre aval\,
plus tard\n";
$nchoix = <STDIN>;
chomp $nchoix;
if ($nchoix eq "1") {
$choix = "$choix1";
}
elsif ($nchoix eq "2") {
$choix = "$choix2";
}
else {$choix = "$choix3"}
open F3, ">$choix" or die "Ouverture impossible $choix $!";
print F3 @c;
close F3 || die "fermeture impossible de $choix $!";
print "Voulez vous consulter le fichier $choix avant de prendre
une décision quand au remplacement des originaux?\n(oui-non)";
$resp = <STDIN>;
chomp $resp;
$resp =~ tr/A-Z/a-z/;
if ($resp =~ /^o|oui/) {
print "@c" . "\n";
}
print "\n\nVoulez vous dans ce cas\, remplacer les fichiers $f1
et $f2 par $choix\n";
chomp ($resp = <STDIN>);
if($resp =~ /^o|oui/) {
print "vous avez choisi d\'effacer les fichiers $f1 et $f2\n";
rename "$f1","$choix";
print "tchao\n";
}
END;