#!/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) que vous nomerez/overwriterez  * 
# Il tourne bien et fait bien plus que ca, je suis content. debut 25/01/02    *
#** ------------------------      ***    ---------------------------------   **
#    écrit par alain Adelmar _ vers 1.03 _  UNIX-like _ Decembre 2002         *
#******************************************************************************
# probleme de date réglé par fonction perso

$x = "x*" x 25;
$ordre = 0;
$dt = time();
@c = <F3>;   #assignation de @c

print "$x\n";
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.\n";
print "$x\n";

# moi aussi je suis fou du chocolat Lanvin
&regfile;
$f1 = $f;
$cf1 = $cf;
$d1t = $dst;

# ouverture lecture du premier fichier
open F1, "$f1" or die "ouverture impossible de $f1 $!";
@contenu1 = <F1>;
close F1 || die "fermeture de $f1 impossible $!";


# copier le contenu trier dans un fichier d'echange (cop_file1)
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 $!";

&regfile;
$f2 = $f;
$cf2 = $cf;
$d2t = $dst;

# 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)
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 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);
$choix1 = "$f1" . "_" . $d1t;
$choix2 = "$f2" . "_" . $d2t;
$choix3 = "update_" . $d1t . "_" . $f1;

#++++++++++++++++++++++++++++++++ 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}++;
  }
  # ici les mots englais pas encore traduit
  next if ($ligne =~ /(ed|ing|ness|ty|ly)$/);  # sortir les mots conjugés mais pas traduit
  $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";
  unlink "$f2";
print "tchao\n";
}

sub regfile {
  if ($ordre == 0) {
    $premier = "premier\n";
  }
  else {
    $premier = "second\n";
  } 
  print "Indiquer quel fichier vous voulez updater en $premier";
  $f = <STDIN>;
  chomp $f;
  until (-e $f) {
    print "le nom de fichier complet $f n'existe pas veuillez le re-enter:\n";
    $f = <STDIN>;
    chomp $f;
  }
  &date;
  $ordre++;
}

sub date {
  
  @st = stat($f);
  $mtfs = $st[9];
  @lsmt = localtime($mtfs);
  # année
  if ($lsmt[5] <= 99) {
    $amt = "1" . $lsmt[5];
  }
  else {
    $mmmt = "0" . ($lsmt[5] - 100);
    $amt = "2" . $mmmt;
  }
  # mois
  if ($lsmt[4] <= 8) {
    $mmt = "0" . ($lsmt[4] + 1);
  }
  else {
    $mmt = ($lsmt[4] + 1);
  }
  # jours
  if ($lsmt[3] <= 8) {
    $jmt = "0" . $lsmt[3];
  }
  else {
    $jmt = $lsmt[3];
  }
  $dst = "$amt$mmt$jmt";
  $cf = "copi_$dst" . "$f";
  print "fichier $f reconnu en $dst sera copier sous: $cf";
}


END;
