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";