Guest User

Untitled

a guest
Feb 21st, 2018
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Perl 2.45 KB | None | 0 0
  1. #!/usr/bin/perl -w
  2.  
  3. # Message donnant la syntaxe d'utilisation
  4. $syntaxe="Usage : $0 FichierOrigine.ged FichierResultat.txt";
  5.  
  6. # Verification du nombre de parametres
  7. # Pour calculer le nombre de parametres on utilise la fonction scalar()
  8. $nbarg = scalar( @ARGV );
  9. if ($nbarg != 2) {die "$syntaxe\n";}
  10.  
  11. # Renommage des parametres
  12. ($entree,$sortie)=@ARGV;
  13.  
  14. # Verification de l'existence ou non des fichiers
  15. if (! -e $entree )
  16.     {die "[Le fichier d'entree $entree n'existe pas]\n";}
  17. if (-e $sortie )
  18.     {die "[Le fichier de sortie $sortie existe deja]\n";}
  19. open(ENTREE, $entree) || die "Impossible de lire $entree";
  20. open(SORTIE, ">$sortie") || die "Impossible d'écrire $sortie";
  21.  
  22.  
  23. # Liste des balises ouvertes à fermer
  24. @pileBalises = ('GEN');
  25. $ancienNiveau = 0;
  26.  
  27. print SORTIE '<?xml-stylesheet href="style.css" type="text/css"?>'."\n";
  28. print SORTIE "<GEN>\n";
  29. while( defined($ligne = <ENTREE>) ) {
  30.  
  31.   # Retrait des blancs en fin de ligne  
  32.   $ligne =~ s/\s+$//;
  33.  
  34.   # Séparation de la ligne en 2 parties : le chiffre, le reste
  35.   $ligne =~ /^(\d+) (.*)$/;
  36.   ($chiffre, $reste) = ($1, $2);
  37.  
  38.   # Belle indentation
  39.   print SORTIE '  ' x ($chiffre + 1);
  40.  
  41.   # Fermeture des balises
  42.   if ($ancienNiveau > $chiffre && scalar(@pileBalises)) {
  43.     $bal = pop(@pileBalises);
  44.     print SORTIE "</$bal>\n";
  45.     print SORTIE '  ' x ($chiffre + 1);
  46.   }
  47.   $ancienNiveau = $chiffre;
  48.  
  49.   # Sélection des lignes de la classe des identificateurs @... @ (INDI, FAM)
  50.  
  51.   if ($reste eq 'BIRT' || $reste eq 'MARR' || $reste eq 'DEAT') {
  52.     print SORTIE "<EVEN EV=\"$reste\">";
  53.     push(@pileBalises, 'EVEN');
  54.   }
  55.   elsif ($reste =~ /^\@(\d+)\@ (INDI|FAM)$/) {
  56.     ($id, $balise) = ($1, $2);
  57.     print SORTIE "<$balise ID=\"$id\">";
  58.     push(@pileBalises, $balise);
  59.   }
  60.   elsif ($reste =~ /(SEX|OCCU|DATE|PLAC) (.*)$/) {
  61.     ($balise, $val) = ($1, $2);
  62.     print SORTIE "<$balise> $val</$balise>";
  63.   }
  64.   elsif ($reste =~ /^NAME (.+?)\/(.+)\/$/) {
  65.     ($prenom, $nom) = ($1, $2);
  66.     print SORTIE "<NAME>$prenom<S>$nom</S></NAME>";
  67.   }
  68.   elsif ($reste =~ /^(FAM[SC]|HUSB|WIFE|CHIL) \@(\d+)\@$/) {
  69.     ($balise, $val) = ($1, $2);
  70.     print SORTIE "<$balise REF=\"$val\"></$balise>";
  71.   }
  72.   else {
  73.     die("Unknown line: " + $reste);
  74.   }
  75.  
  76.   print SORTIE "\n";
  77. }
  78.  
  79. # Fermeture des balises restantes
  80. while (scalar(@pileBalises)) {
  81.   $ancienNiveau--;
  82.   $bal = pop(@pileBalises);
  83.   print SORTIE '  ' x ($ancienNiveau + 1);
  84.   print SORTIE "</$bal>\n";
  85. }
Add Comment
Please, Sign In to add comment