#!/usr/bin/perl
<<DOC; 
Votre Nom : Condori Jackeline 
A partir d'une version de: Monsieur Jean-Michel Daube
usage : perl BAO3_perl.pl repertoire_en_entree repertoire en sortie fichier_de_patrons
DOC
#On fait en sorte d'avoir un nom de fichier correcte en sortie
my $res=$ARGV[0];
my $dossier_de_sortie=$ARGV[1];
$res=~s/\/$//;
$dossier_de_sortie=~s/\/$//;
my $patron=$ARGV[2];
my @tokens=();
my @lemmes=();
my @categories=();

#ouverture du répertoire
opendir(DIR, $res) or die "Erreur d'ouverture de repertoire: $!\n";
my @files_a_traiter = readdir(DIR);	
#print "FOUND : @files_a_traiter\n";
closedir(DIR);
# pour chaque fichier dans le dossier
foreach my $file(@files_a_traiter) 
{
	if ($file=~/(.+?)\.cnr$/)
	{
		my $filetxt=$1.".txt";
		print "Fichier : $file\n";

		open(FILE_IN, "<:encoding(iso-8859-1)", "$res/$file");
		#lecture ligne à ligne du fichier
		while(my $line=<FILE_IN>)
		{
			# on ne traite que les lignes qui contiennent une tabulation de CORDIAL jusqu'à 
			#une ponctuation forte
			if ($line!~/PCTFORTE/) 
			{
				#on découpe donc la ligne en suivant les tabulations de CORDIAL ce qui nous 
				#donne 3 éléments dans @row
				chomp($line);
				$line=~s/\r//;
				my @row=();
				@row=split("\t", $line); # liste (lemme, forme, catégorie) pour chaque mot
				push(@tokens, $row[0]);
				push(@lemmes, $row[1]);
				push(@categories, $row[2]);
			}
			
			else #quand on arrive à une ponctuation forte
			{
				
				#traitement sur les tokens
				&traiter_liste_categories($filetxt);
			
				#réinitialisation des tableaux 
				@tokens=();
				@lemmes=();
				@categories=();
			}
		}
	}
}

close(FILE_IN);


#---Traitement des catégories--->

sub traiter_liste_categories{

	$filetxt=shift;
	open(FILE_PATRONS, "<:encoding(iso-8859-1)", $patron);
	# faire un scalaire du  tableau de catégories 
	my $chaine_de_cats=join(" ",@categories); 
	#si c'est la première fois qu'on rencontre cette rubrique
	if (! -e "$dossier_de_sortie/$filetxt") 
	{
		if (!open (FILEOUT,">:encoding(iso-8859-1)","$dossier_de_sortie/$filetxt"))
		{ 
			die "Probleme a l'ouverture du fichier : $dossier_de_sortie/$filetxt $!\n";
		}
	}
	else
	{
		if (!open (FILEOUT,">>:encoding(iso-8859-1)","$dossier_de_sortie/$filetxt"))
		{ 
			die "Probleme a l'ouverture du fichier : $dossier_de_sortie/$filetxt $!\n";
		}
	}
	# pour chaque patron syntaxique
	while(my $line_patron=<FILE_PATRONS>) 
	{
		chomp($line_patron);
		$line_patron=~s/\r//g;
		
		my $compteur=0;
		while ($chaine_de_cats=~/$line_patron/g)
		{
			$compteur++;
			
			my $avant=$`;
			my $apres=$';
			my $nombre_de_separateurs_dans_patron=0;
			my $nombre_de_separateurs_dans_possible_match=0;
			
			# compter le nombre de séparateurs dans la liste de catégories à traiter
			while ($avant=~/ /g) 
			{
				$nombre_de_separateurs_dans_possible_match++;
			}
			# compter le nombre de séparateurs dans le patron
			while ($line_patron=~/ /g) 
			{
				$nombre_de_separateurs_dans_patron++;
			}
			
			
			#---Chercher les correspondances --->
			
			for (my $i=$nombre_de_separateurs_dans_possible_match; 
			$i<=$nombre_de_separateurs_dans_possible_match+$nombre_de_separateurs_dans_patron; $i+=1)
			{
				print FILEOUT $tokens[$i], " ";
				
			}
			print FILEOUT "\n";
		}
	}
	close(FILE_PATRONS);
	close(FILEOUT);
}





