#!/usr/bin/perl
<<DOC; 
Nom: Egle Ramdani 
FEVRIER 2006
Usage : perl cordialxml.pl fichier-étiqueté-par-Cordial
Le programme prend en entrée un fichier étiqueté par Cordial (forme, lemme, catégorie)
et produit en sortie un fichier XML avec la structure suivante:
<ELEMENT>
<DATA type="forme">forme</DATA>
<DATA type="lemme">lemme</DATA>
<DATA type="cat">catégorie</DATA>
<ELEMENT>
DOC

&ouvre;
&entete;
&traitement;
&fin;
&ferme;
# Récupération des arguments et ouverture des tampons ---------------------------------------
sub ouvre {
    $FichierEntree=$ARGV[0];
    open(Entree,$FichierEntree);
    $FichierSortie=$FichierEntree.".xml";
    open(Sortie,">$FichierSortie");
}

# Entête de document XML--------------------------------------------------------------------
sub entete {
    print Sortie "<?xml version=\"1.0\" encoding=\"iso-8859-1\" standalone=\"no\"?>\n";
    print Sortie "<PARCOURS>\n";
    print Sortie "<AUTEUR>Egle Ramdani</AUTEUR>\n";
}

# Conversion en XML-------------------------------------------------------------------------
sub traitement {
    while ($Ligne = <Entree>) {
            #Remplacement des guillemets par <![CDATA["]]> (évite erreur d'interprétation XML)
            $Ligne=~s/\"/<![CDATA[\"]]>/g;
            $Ligne=~s/([^\t]*)\t([^\t]*)\t(.*)/<ELEMENT>\n<DATA type=\"forme\">$1<\/DATA>\n<DATA type=\"lemme\">$2<\/DATA>\n<DATA type=\"cat\">$3<\/DATA>\n<\/ELEMENT>/;
            print Sortie $Ligne;
    }
}
# Fin de fichier----------------------------------------------------------------------------
sub fin {
    print Sortie "</PARCOURS>\n";
}

# Fermeture des fichiers--------------------------------------------------------------------
sub ferme {
    close(Entree);
    close(Sortie);
}