Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/perl -w
- # Message donnant la syntaxe d'utilisation
- $syntaxe="Usage : $0 FichierOrigine.ged FichierResultat.txt";
- # Verification du nombre de parametres
- # Pour calculer le nombre de parametres on utilise la fonction scalar()
- $nbarg = scalar( @ARGV );
- if ($nbarg != 2) {die "$syntaxe\n";}
- # Renommage des parametres
- ($entree,$sortie)=@ARGV;
- # Verification de l'existence ou non des fichiers
- if (! -e $entree )
- {die "[Le fichier d'entree $entree n'existe pas]\n";}
- if (-e $sortie )
- {die "[Le fichier de sortie $sortie existe deja]\n";}
- open(ENTREE, $entree) || die "Impossible de lire $entree";
- open(SORTIE, ">$sortie") || die "Impossible d'écrire $sortie";
- # Liste des balises ouvertes à fermer
- @pileBalises = ('GEN');
- $ancienNiveau = 0;
- print SORTIE '<?xml-stylesheet href="style.css" type="text/css"?>'."\n";
- print SORTIE "<GEN>\n";
- while( defined($ligne = <ENTREE>) ) {
- # Retrait des blancs en fin de ligne
- $ligne =~ s/\s+$//;
- # Séparation de la ligne en 2 parties : le chiffre, le reste
- $ligne =~ /^(\d+) (.*)$/;
- ($chiffre, $reste) = ($1, $2);
- # Belle indentation
- print SORTIE ' ' x ($chiffre + 1);
- # Fermeture des balises
- if ($ancienNiveau > $chiffre && scalar(@pileBalises)) {
- $bal = pop(@pileBalises);
- print SORTIE "</$bal>\n";
- print SORTIE ' ' x ($chiffre + 1);
- }
- $ancienNiveau = $chiffre;
- # Sélection des lignes de la classe des identificateurs @... @ (INDI, FAM)
- if ($reste eq 'BIRT' || $reste eq 'MARR' || $reste eq 'DEAT') {
- print SORTIE "<EVEN EV=\"$reste\">";
- push(@pileBalises, 'EVEN');
- }
- elsif ($reste =~ /^\@(\d+)\@ (INDI|FAM)$/) {
- ($id, $balise) = ($1, $2);
- print SORTIE "<$balise ID=\"$id\">";
- push(@pileBalises, $balise);
- }
- elsif ($reste =~ /(SEX|OCCU|DATE|PLAC) (.*)$/) {
- ($balise, $val) = ($1, $2);
- print SORTIE "<$balise> $val</$balise>";
- }
- elsif ($reste =~ /^NAME (.+?)\/(.+)\/$/) {
- ($prenom, $nom) = ($1, $2);
- print SORTIE "<NAME>$prenom<S>$nom</S></NAME>";
- }
- elsif ($reste =~ /^(FAM[SC]|HUSB|WIFE|CHIL) \@(\d+)\@$/) {
- ($balise, $val) = ($1, $2);
- print SORTIE "<$balise REF=\"$val\"></$balise>";
- }
- else {
- die("Unknown line: " + $reste);
- }
- print SORTIE "\n";
- }
- # Fermeture des balises restantes
- while (scalar(@pileBalises)) {
- $ancienNiveau--;
- $bal = pop(@pileBalises);
- print SORTIE ' ' x ($ancienNiveau + 1);
- print SORTIE "</$bal>\n";
- }
Add Comment
Please, Sign In to add comment