Bonjour à tous ,

J'ai un petit problème étonnant (en tout cas, moi ça m'étonne ) sur un programme que je suis en train d'écrire. Je souhaite remplacer une série de mots dans un fichier, en sortie d'OCRisation imparfaite. J'utilise pour ça du Regex ULTRA basique.

J'ai créer mon programme et la liste des mots à modifier. Malheureusement, le programme ne corrige que la première erreur rencontrée. Si d'autres mots se trouvent à corriger la première correction, c'est comme s'il ne les voyait pas. Le code ressemble à ça :

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
 
################
### DEBUT    ###
################
 
#!/usr/local/bin/perl
use POSIX;
use CGI qw/:all /;
use UTF8;
 
my @blocfinal;
 
$mode = '>';
 
######
# GO #
######
 
open (FICH, "test.txt") || die ("pas de fichier html dans le répertoire\n");
 
while ($ligne = <FICH>)
{
	$ligne =~ s/ viiieis / vineis /;
	# ici suit une liste interminable de remplacements de ce genre
 
	push @blocfinal, $ligne;		
}
 
close (FICH);
 
#############################
# ECRITURE DU FICHIER FINAL #
#############################
 
open(OUT, $mode, "out.txt") or die("open: $!");	
 
	print OUT @blocfinal;	
 
close (OUT);

Maintenant si j'applique ça sur un fichier contenant :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
De viiieis sancti petri viiieis ......de cragia, test viiieis test
J'obtiens :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
De vineis sancti petri viiieis ......de cragia, test viiieis test
Alors que je voudrais :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
De vineis sancti petri viiieis ......de cragia, test vineis test
S'il vous plaît, est-ce que quelqu'un aurait une idée pour me sortir de ce mauvais pas ? Je suppose que cela a quelque chose à voir avec ma manière de lire le fichier (while ; $ligne ; etc.). Ou peut-être dans mon RegEx faut-il spécifier quelque part le besoin d'itération ($ligne =~ s/ viiieis / vineis /;
) ?

En vous remerciant pour toute réponse.
Cordialement.