salut,

j'ai un petit exo en perl à faire pour ma 3e année de fac et je n'en viens pas à bout... j'ai un fichier 'dictionnaire' son rôle est je pense plutôt implicite, à savoir un mot par ligne.
le but est de scanner un texte et proposer une correction orthographique des mots absents dans le dictionnaire par des mots qui diffèrent d'au plus de 2 caractères.


voilà ce que j'ai fait pour le moment :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#! /usr/bin/perl
use warnings;
use strict;
 
 
 
my $DICO_FNAME = "dictionnaire";
 
sub word_exists {
  if (!defined($_[0])) {
    return 0;
  }
 
  open(DICO, "<", $DICO_FNAME);
  while(defined(my $word = <DICO>)) {
    if($word eq $_[0]) {
      return 1;
    }
  }
  close(DICO);
  return 0;
}
 
sub find_similar {
  if(!defined($_[0])) {
    return 0;
  }
 
  open(DICO, "<", $DICO_FNAME);
  my @words = ();
 
  while(defined(my $dword = <DICO>)) {
    if(length($dword) == length($_[0])) {
      my @string = split(//, $_[0]);
      my @chars = split(//, $dword);
      my $faults = 0;
 
      for my $char (@chars) {
        my $cp = shift(@string);
        if(defined($cp)) {
          if ($char ne $cp) {
            $faults++;
          }
        }
      }
      if($faults < 3) {
        push(@words, $dword);
      }
    }
  }
  return @words;
}
 
while(defined(my $word = <STDIN>)) {
  $word = lc($word);
  if(!word_exists($word)) {
    my @similis = find_similar($word);
    print "Corrections possibles : @similis\n";
  } else {
    chomp($word);
    print "$word : correct.\n";
  }
}
mais quand je lance
rien ne se passe...

je ne sais pas si j'ai bien expliqué mon problème en tout cas je remercie la communauté par avance
bonne soirée