deux2one-version-generale.pl

#!/usr/bin/perl
use locale; #caracteres accentues
#perl deux2one-version-generale.pl
#En gros: Bash n'aime pas les slash, les guillemets et les chevrons et Perl n'aime pas les points et les espaces et avoir à traiter trop de fichiers au même temps
#Fichier en entrée sans feuille de style
print "Bienvenu(e) au programme qui permet de fusionner deux fichiers XML \n quelconques et rajouter la feuille de style. \n";

print "\n Vous avez deux fichiers qui se nomment : \n A.xml et B.xml et une feuille de style C.xsl \n";
print "Et vous souhaitez avoir en sortie un tableau double. \n";
print "Donnez le nom de votre premier fichier XML: \n";
my $a=<STDIN>;
chomp($a);
$a=~ s/\.xml$//;
print "Donnez le nom de votre deuxieme fichier XML: \n";
my $b=<STDIN>;
chomp($b);
$b=~ s/\.xml$//;
print "Donnez le nom complet de votre feuille de style XSL \n (...qui fait le tableau a deux n colonnes): \n";
my $c=<STDIN>;
chomp($c);
$c=~ s/\.xsl$//;
print "Donnez un nom representatif du theme de vos 3 fichiers \n sans espaces ni ponctuation sauf - ex: livres-culture: \n";
my $name=<STDIN>;
chomp($name);
my $file3 = $a.".xml";
my $file4 = $b.".xml";
system "#!/bin/bash
cp $file3 \.\/$a-$name.xml;
cp $file4 \.\/$b-$name.xml;
echo \"Attendez s'il vous plait...\";";
my $file1 = $a."-".$name.".xml";
my $file2 = $b."-".$name.".xml";
system "#!/bin/bash
#tete
#Suppression de tout le code de la feuille de style pour modification complete ou insertion
grep -v xml-stylesheet $file1 > temp-$file1;
#queue selection de l'inverse sinon: EOF pour les guillemets et No such file or directory pour le chevron
grep -v xml-stylesheet $file2 > temp-$file2;
grep -v standalone temp-$file2 > temp2-$file2;
rename temp-$file1 $file1 temp-$file1;
rename temp2-$file2 $file2 temp2-$file2;
rm temp-$file2;";
#Modification de la deuxieme ligne
#tete
#sed n'accepte pas les fichiers en variables
open(FILEIN01, $file1);
open(FILEOUT01, ">$file1.temp");
my $DUMPFULL01="";
while(my $recup01=<FILEIN01>) {
$recup01=~s/<\?xml version=\"1\.0\" encoding=\"iso-8859-1\" standalone=\"no\"\?>\n/<\?xml version=\"1\.0\" encoding=\"iso-8859-1\" standalone=\"no\"\?>\n<\?xml-stylesheet type=\"text\/xsl\" href=\"$c\.xsl\"\?>\n/g;
$DUMPFULL01.=$recup01;
};
print FILEOUT01 $DUMPFULL01;
close(FILEIN01);
close(FILEOUT01);
system "#!/bin/bash
rename $file1.temp $file1 $file1.temp;";
print "\n Tape le nom de la balise racine commune a \n ",$a,".xml et ",$b,".xml sans les chevrons: \n";
my $racine=<STDIN>;
chomp($racine);
my $tete = "<".$racine."\>";
my $queue = "<\/".$racine."\>";
print "On va alors modifier: ",$tete," et ",$queue,"\n"," dans ",$file1," et ",$file2,"\n";
print "On a maintenant besoin de deux sous-balises differentes pour chaque fichier. \n";
print "\n Tape un nom de balise pour figurer en seconde place dans le fichier ",$file1,"\n";
my $deux1=<STDIN>;
chomp($deux1);
my $deux11 = "<".$deux1."\>";
my $deux12 = "<\/".$deux1."\>";
print "\n Tape un nom de balise pour figurer en seconde place dans le fichier ",$file2,"\n";
my $deux2=<STDIN>;
chomp($deux2);
my $deux21 = "<".$deux2."\>";
my $deux22 = "<\/".$deux2."\>";
print "On va alors additionner: ",$deux11," dans ",$file1," et\n ",$deux21," dans ",$file2,"\n";
#Deux deuxiemes balises differentes
#Premier fichier
open(FILEIN04, $file1);
open(FILEOUT04, ">$file1.temp");
my $DUMPFULL04="";
while(my $recup04=<FILEIN04>) {
$recup04=~s/$tete/$tete\n$deux11/g; #sous-document avec la balise racine puis la sous-balise
$recup04=~s/$queue/$deux12/g; #Une seule racine: racine #tete du gros document #supprime la balise racine fermante
$DUMPFULL04.=$recup04;
};
print FILEOUT04 $DUMPFULL04;
close(FILEIN04);
close(FILEOUT04);
#Deuxième fichier
open(FILEIN05, $file2);
open(FILEOUT05, ">$file2.temp");
my $DUMPFULL05="";
while(my $recup05=<FILEIN05>) {
$recup05=~s/$tete/$deux21/g; #Une seule racine: racine #queue du gros document #supprime la balise racine ouvrante
$recup05=~s/$queue/$deux22\n$queue/g; #sous-document avec la sous-balise puis la balise racine
$DUMPFULL05.=$recup05;
};
print FILEOUT05 $DUMPFULL05;
close(FILEIN05);
close(FILEOUT05);
system "#!/bin/bash
#tete (suite)
rename $file1.temp $file1 *\.temp;
rename $file2.temp $file2 *\.temp;
#Concatenation de la tete avec la queue
cat $file1 $file2 >> tempp1.xml;
rename tempp1.xml $file1 tempp1.xml;
#Suppression de la queue
rm $file2;
echo \"Termine.\";";
print "\nLe nouveau fichier créé se nomme $file1";
print "\nProposez un nouveau nom pour ce fichier.\n";
my $d=<STDIN>;
chomp($d);
$d=~ s/\.xml$//;
my $file3 = $d.".xml";
system "#!/bin/bash
rename $file1 $file3 $file1;
echo \"Termine.\";";
print "\nLe nouveau fichier créé se nomme $file3";