1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
| #####################definition des variables#########################################
my $FIC_PARAM;
my $FIC_RES_PMART;
my $IFS_OLD;
my $IFS;
my $CLE;
my $CLE_OLD;
my $P_XML;
my $LG_LIGNE;
my $LG_CLE;
my $AFF_CLE;
$FIC_PARAM ="$ENV{IN_CHAINE}/RTFPRV.dat";
$FIC_RES_PMART ="$ENV{SRC}/trafic_pvol.xml";
#--------------- Test existence du fichier initial -------------
#--- FIC_PARAM ---
#suppression des fichiers resultats
unlink ("$FIC_RES_PMART");
###### modification de la variable IFS
$IFS_OLD=$IFS;
$IFS="
";
# chargement du fichier en entrée:
open(IN, "$FIC_PARAM") || die "Erreur E/S:$!\n";
my @CONTENU = <IN>;
close(IN);
# ouverture du fichier en sortie
open(OUT, ">$FIC_RES_PMART") || die "Erreur E/S:$!\n";
# insertion de la premiuere ligne dans le fichier de sortie
print OUT "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
print OUT "<List_Ass xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:noNamespaceSchemaLocation=\"file:ass.xsd\">";
my $ITERATION = 1;
# pour chaque ligne du fichier
foreach my $LIGNE (@CONTENU)
{
chomp $LIGNE;
# si on est sur la première ligne on conserve juste la clé
if ($ITERATION == 1)
{
# récupération de la clé
$CLE_OLD=substr($LIGNE, 2, 26);
$ITERATION = 0;
}
else
{
# récupération de la clé
$CLE=substr($LIGNE, 2, 26);
# si la reference de la ligne est egal a la derniere reference
if ($CLE eq $CLE_OLD)
{
# récupère la longueur de la ligne
$LG_LIGNE=length($LIGNE);
$P_XML=substr($LIGNE, 46, $LG_LIGNE);
# supprime les blanc en fin de ligne
$P_XML=~s/\s+$//g;
print OUT "$P_XML";
}
else
{
# insertion d un retour chariot puis de la partie xml de la ligne
# récupère la longueur de la ligne
$LG_LIGNE=length($LIGNE);
$LG_CLE=length($CLE);
$P_XML=substr($LIGNE, 51, $LG_LIGNE);
if ("$CLE" ne "0000-00-00-00.00.00.000000" and "$CLE" ne "9999-99-99-99.99.99.999999")
{
# récupération d'une partie de la clé
$AFF_CLE=substr($CLE, 3, $LG_CLE);
# insertion de cle dans les Message
print OUT "\n";
print OUT "<Ass><Cle_Mess>";
print OUT "$CLE";
print OUT "</Cle_Mess>";
# insertion du debut du message
print OUT "$P_XML";
}
}
# la derniere reference devient la reference de la ligne courante
$CLE_OLD=$CLE;
}
}
print OUT "\n</List_Ass>";
# fermeture fichier résultat
close(OUT); |
Partager