Sophie

Sophie

distrib > Mandriva > 9.2 > i586 > by-pkgid > 0bf74b6493241ea2388028ea27a3655d > files > 13

ispell-fr-1.0-15mdk.noarch.rpm

#! /usr/bin/perl -w

# Ce programme permet de comparer deux listes de mots : il écrit dans un
# troisième fichier les mots présents dans la seconde liste mais absents
# de la première.
#
# Syntaxe : dansdico liste1 liste2 resultat
#
# IMPORTANT : les deux listes doivent avoir été préalablement triées selon
# l'ordre des caractères spécifiques au système d'exploitation (si ce n'est
# pas le cas, des résultats abérants seront produits).  Un peu moyen
# d'effectuer cette opération est d'utiliser la commande 'sort' comme suit :
#
# sort liste1 > prov; mv prov liste1
# sort liste2 > prov; mv prov liste2
#
# Faire une copie de sécurité des deux listes n'est pas un luxe.
# Si vous avez un doute sur l'ordre de tri, faites tourner le programme sur
# la même liste ('dansdico liste1 liste1 resultat').  Si la taille du fichier
# 'resultat' est non-nulle, il y a un problème.  Essayez un autre programme
# de tri.

use strict;

my($MotListe1, $MotListe2);

# Vérification de la syntaxe
unless (@ARGV == 3) {
  print STDERR "dansdico: SYNTAXE : dansdico liste1 liste2 resultat\n";
  exit (1);
}

# Ouverture des fichiers
unless (open (LST1, $ARGV[0])) {
  print STDERR "dansdico: Impossible d'ouvrir le fichier $ARGV[0] !\n";
  exit (2);
}
unless (open (LST2, $ARGV[1])) {
  print STDERR "dansdico: Impossible d'ouvrir le fichier $ARGV[1] !\n";
  close (LST1);
  exit (2);
}
unless (open (RSLT, ">$ARGV[2]")) {
  print STDERR "dansdico: Impossible de créer le fichier $ARGV[2] !\n";
  close (LST1);
  close (LST2);
  exit (2);
}

# Vérifions que les fichiers ne soient pas vides
if (eof LST1) {
  print STDERR "dansdico: Le fichier $ARGV[0] est vide !\n";
  exit (3);
}
if (eof LST2) {
  print STDERR "dansdico: Le fichier $ARGV[1] est vide !\n";
  exit (3);
}

# Procédure de comparaison (voir le répertoire 'docs' pour l'algorithme)
$MotListe1 = <LST1>;
TEST: for (;;) {
  if (eof LST2) {
    last;
  }
  $MotListe2 = <LST2>;

  while ($MotListe1 lt $MotListe2) {
    if (eof LST1) {
      until (eof LST2) {
	print RSLT <LST2>;
      }
      last TEST;
    }
    $MotListe1 = <LST1>;
  }

  if ($MotListe1 eq $MotListe2) {
    if (eof LST1) {
      until (eof LST2) {
	print RSLT <LST2>;
      }
      last;
    }
    $MotListe1 = <LST1>;
    next;
  }

  print RSLT $MotListe2;
}

close (LST1);
close (LST2);
close (RSLT);

exit (0);