Dès que j'ai du temps, j'essaye de faire un petit prog.
Dès que j'ai du temps, j'essaye de faire un petit prog.
Voici un programme qui fonctionne. Tu peux le tester. À toi de l'adapter après car tes explications ne m'aident pas plus :
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102 #!/usr/bin/perl use strict; use warnings; use XML::Twig; use File::Spec; #----------------------------------------------------------- # MAIN #----------------------------------------------------------- my $RepBase = 'D:/Memoire Mastere/Script/Script_final/Script_Grapheme-phoneme'; #Déclaration des fichiers Xml: my $FichierOutput = File::Spec->catfile($RepBase, 'output.xml' ); my $FichierReglePhonetique = File::Spec->catfile($RepBase, 'RegleDePhonetisation.xml' ); my $FichierBAseException = File::Spec->catfile($RepBase, 'BaseException.xml' ); #Déclaration du fichier résultat my $FicAraOut1 = File::Spec->catfile( $RepBase, 'outregless.txt' ); open my $fh_Aran, '>:encoding(UTF-8)', $FicAraOut1 or die "Impossible ouvrir fichier $FicAraOut1 en sortie\n"; # Création d'un hash dans lequel sera stocké les fichiers de base et règles my %BaseRegle = ( regle => undef, base => undef, ); # Fichier base : on a juste besoin du numéro de la regle pour l'unicité et de la valeur de type graph # Num => Val (graph) my $twig_base = XML::Twig->new( Twig_handlers => { 'Composant' => \&composant, }, ); $twig_base->parsefile($FichierReglePhonetique); $twig_base->purge; # Fichier regle : on a juste besoin du numéro de la regle pour l'unicité et de la valeur de type graph # {Num}{Grapheme}(VAL) et {Num}{Phoneme}(VAL) my $twig_regle = XML::Twig->new( Twig_handlers => { 'Exception' => \&exception, }, ); $twig_regle->parsefile($FichierBAseException); $twig_regle->purge; # LEcture du fichier output my $twig_output = XML::Twig->new( Twig_handlers => { 'Mot' => \&mot, }, ); $twig_output->parsefile($FichierOutput); $twig_output->purge; close $fh_Aran; sub mot { my ($twig, $twig_mot) = @_; my $mot = $twig_mot->att('Nom'); # 1- Mot identique à grapheme foreach my $num_exception ( keys %{ $BaseRegle{base} } ) { if ( $BaseRegle{base}{$num_exception}{grapheme} eq $mot ) { print {$fh_Aran} "Mot identique : $mot =>=> $BaseRegle{base}{$num_exception}{phoneme}\n"; last; } } # 2- Lecture des caractères foreach my $twig_caractere ( $twig_mot->children('caractere') ) { # composant foreach my $num_regle ( keys %{ $BaseRegle{regle} } ) { if ( $BaseRegle{regle}{$num_regle} eq $twig_caractere->text ) { print {$fh_Aran} "\tcaracteres =>=> $BaseRegle{regle}{$num_regle}\n"; } } } } sub composant { my ($twig, $twig_composant) = @_; my $type_composant = $twig_composant->att('Nom'); my $num_regle = $twig_composant->parent('Regle')->att('Num'); return if ( $type_composant ne 'Graph' ); # Stockage $BaseRegle{regle}{$num_regle} = $twig_composant->text; } sub exception { my ($twig, $twig_exception) = @_; my $num_exception = $twig_exception->att('Num'); # Stockage $BaseRegle{base}{$num_exception}{grapheme} = $twig_exception->field('Grapheme'); $BaseRegle{base}{$num_exception}{phoneme} = $twig_exception->field('Phoneme'); }
Bonjour Djibril,
je suis vraiment désolé pour le retard
Merci beaucoup pour votre aide, je vais le tester et je vais vous répondre aussi vite.
Merci une autre fois
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager