1 #!usr/bin/perl
  2 
  3 # But du programme : Faire un recode forcé de tous les fichiers contenus dans le dossier passé en paramètre de la ligne de 
  4 # commande
  5 # Fonctionnement : perl+prog+dossier (le dossier doit porter le nom d'un encodage et être issus de BAO1)
  6 
  7 use strict;
  8 use warnings;
  9 use 5.014;
 10 use Switch;
 11 use Encode;
 12 use Data::Dumper;
 13 
 14 # Main
 15 
 16 say "_"x20;
 17 die "\nPour $0 syntaxe correcte : perl $0 nom_repertoire (le nom de dossier doit être un encodage)" unless @ARGV == 1;
 18 my $dossier=$ARGV[0];
 19 my $encodage = "$dossier";
 20 $encodage=~ s/.*?\/(.*?)/$1/g;
 21 say $encodage;
 22 
 23 my @tabUtf8=("utf8","utf-8","UTF8","UTF-8");
 24 my $iso="iso-8859-1";
 25 my $utf8="utf8";
 26 my $case;
 27 my $saveName;
 28 
 29 foreach my $cell (@tabUtf8)
 30 {
 31     if ($cell eq $encodage)
 32     {
 33         $case=1;
 34         system ("rm -rf  ./RESULTAT_EXTRACTION/RECODE_ISO");
 35         system("rm -rf ./RESULTAT_EXTRACTION/treetagger/utf8");
 36         mkdir ("./RESULTAT_EXTRACTION/RECODE_ISO");
 37     }
 38 }
 39 if ($encodage eq $iso)
 40 {
 41     $case=2;
 42     system ("rm -rf  ./RESULTAT_EXTRACTION/RECODE_UTF8");
 43     system("rm -rf ./RESULTAT_EXTRACTION/treetagger/recodeIso");
 44     mkdir ("./RESULTAT_EXTRACTION/RECODE_UTF8");
 45 }
 46 switch ($case)
 47 {
 48     case 1{parcours($dossier)}
 49     case 2{parcours($dossier)}
 50     else {say "nom de dossier invalide"}
 51 }
 52 #Fonction(s)
 53 
 54 sub parcours
 55 {
 56     my ($dossierEnCours)=@_;
 57     opendir (my $D, $dossierEnCours)  or die "Erreur d'ouverture de dossier type : $!";
 58     foreach my $x (readdir ($D))
 59     {
 60             $saveName=$x;
 61             $x=$dossierEnCours."/".$x;
 62             next if $x=~ /^\.|\.\.?$/;
 63         if (-d $x)
 64         {
 65             parcours($x);
 66         }
 67         elsif (-f $x)
 68         {
 69             detecteTXT($x);
 70         }
 71     }
 72     closedir $D;
 73 }
 74 
 75 sub detecteTXT
 76 {
 77     my ($fichier)=@_;
 78     if (!($fichier=~ m/.*?xmlrss.*?txt$/))
 79     {
 80 
 81         if($fichier=~ m/txt$/)
 82         {
 83             nomChemin($fichier);
 84         }
 85     }
 86 }
 87 
 88 sub nomChemin
 89 {
 90     my ($chemin)=@_;
 91     my $rubrique;
 92     my $fichier;
 93     if ($case==1)
 94     {
 95         $chemin=~ s/utf8/UTF-8/g;
 96         $chemin=~ s/utf8/UTF-8/g;
 97         $chemin=~ s/utf-8/UTF-8/g;
 98         $chemin=~ s/UTF8/UTF-8/g;
 99         while ($chemin=~ m/.*UTF-8.(.*?).(0,.*txt)$/g)
100         {
101             $rubrique=$1;
102             $fichier=$2;
103             recode($chemin,$rubrique,$fichier);
104         }
105     }
106 
107     if ($case==2)
108     {
109         while ($chemin=~ m/.*$iso.(.*?).(0,.*txt)$/g)
110         {
111             $rubrique=$1;
112             $fichier=$2;
113             recode($chemin,$rubrique,$fichier);
114         }
115     }
116 
117 }
118 
119 sub recode
120 {
121     my %hashUtf8=(
122         "\x{0153}"=>"œ",
123         "\x{0140}"=>"ŀ",
124         "\x{2019}"=>"",
125         "\x{2026}"=>"",
126         "\x{201c}"=>"",
127         "\x{201d}"=>"",
128         "\x{20ac}"=>"",
129         "\x{2031}"=>"",
130         "\x{2009}"=>"",
131         "\x{2018}"=>"",
132         "\x{2192}"=>"",
133         "\x{fffd}"=>"",
134         "\x{2001}"=>"",
135         "\x{0152}"=>"Œ",
136         "\x{C3A9}"=>"\x{E9}",
137         "\x{2013}"=>""
138     );
139     my %hashIso=(
140 #   "\xE9"=>"\x{C3A9}"
141     );
142     my ($chemin,$rubrique,$fichier)=@_;
143     if ($case==1)
144     {
145         mkdir ("./RESULTAT_EXTRACTION/RECODE_ISO");
146         mkdir ("./RESULTAT_EXTRACTION/RECODE_ISO/$rubrique");
147         my $casVide=0;
148         open (my $IN, "<:encoding($utf8)", "$chemin") or die "problème ouverture fichier UTF8 numéro : $chemin";
149         open (my $OUT, ">>:encoding($iso)", "./RESULTAT_EXTRACTION/RECODE_ISO/$rubrique/recode$fichier");
150         unless (my $test = <$IN>)
151         {
152             say $OUT "fichier vide";
153             $casVide++;
154         }
155         while (my $ligne = <$IN>)
156         {
157                 foreach my $key (keys %hashUtf8)
158             {
159                 $ligne=~ s/$key/$hashUtf8{$key}/g;
160             }
161             #say "$rubrique $fichier";
162             print $OUT "$ligne";
163         }
164         close $IN;
165         close $OUT;
166         if ($casVide == 0)
167         {
168 
169             mkdir ("./RESULTAT_EXTRACTION/treetagger");
170             mkdir ("./RESULTAT_EXTRACTION/treetagger/utf8");
171             mkdir ("./RESULTAT_EXTRACTION/treetagger/utf8/$rubrique");
172             open (my $OUTTreetagger , ">>", "./RESULTAT_EXTRACTION/treetagger/utf8/$rubrique/tagger_$fichier");
173             foreach (`/home/joe/treetagger/cmd/tree-tagger-french-utf8 $chemin`)
174             {
175               print $OUTTreetagger "$_";
176             }
177             close $OUTTreetagger;
178         }
179     }
180     if ($case==2)
181     {
182         mkdir ("./RESULTAT_EXTRACTION/RECODE_UTF8");
183         mkdir ("./RESULTAT_EXTRACTION/RECODE_UTF8/$rubrique");
184         my $casVide=0;
185         open (my $IN2, "<:encoding($iso)", "$chemin") or die "problème ouverture fichier ISO numéro : $chemin";
186         open (my $OUT2, ">>:encoding($utf8)", "./RESULTAT_EXTRACTION/RECODE_UTF8/$rubrique/recode$fichier") or die "problème ouverture fichier ISO numéro : $chemin";
187         unless (my $test = <$IN2>)
188         {
189             say $OUT2 "fichier vide";
190             $casVide++;
191         }
192         while (my $ligne = <$IN2>)
193         {
194             foreach my $key (keys %hashIso)
195             {
196                 $ligne=~ s/$key/$hashIso{$key}/g;
197             }
198             #say "$rubrique $fichier";
199             print $OUT2 "$ligne";
200         }
201         close $IN2;
202         close $OUT2;
203         if ($casVide == 0)
204         {
205 
206             mkdir ("./RESULTAT_EXTRACTION/treetagger");
207             mkdir ("./RESULTAT_EXTRACTION/treetagger/recodeIso");
208             mkdir ("./RESULTAT_EXTRACTION/treetagger/recodeIso/$rubrique");
209             open (my $INTreetagger , "<", "./RESULTAT_EXTRACTION/RECODE_UTF8/$rubrique/recode$fichier");
210             open (my $OUTTreetagger , ">>", "./RESULTAT_EXTRACTION/treetagger/recodeIso/$rubrique/tagger_$fichier");
211             foreach (`/home/joe/treetagger/cmd/tree-tagger-french $chemin`)
212             {
213               print $OUTTreetagger "$_";
214             }
215             close $INTreetagger;
216             close $OUTTreetagger;
217         }
218     }
219 
220 }
221