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
|
sub trim {
my ( $sString ) = @_;
$sString =~ s/^\s*([^\s]?.*[^\s]?)\s*$/\1/;
return $sString;
}
# On ne connait pas la premiere ligne
$sFirstLine = "";
# Pas plus que le numero de paragraphe courant
$sParagraphNumber = "";
# Tant qu'on arrive a lire l'entree standard
while ( defined($sLine = <STDIN>) ) {
# On vire les retours chariot de la ligne lue
$sLine =~ s/(\r|\n)/g;
# On vire les espaces à gauche et a droite de ladite ligne
$sLine = trim($sLine);
# On zappe les lignes vides
next if ( $sLine eq "" );
# Si la premiere ligne n'est toujours pas connue
if ( $sFirstLine eq "" ) {
# On la connait maintenant
$sFirstLine = $sLine;
# Et on passe au tour de boucle suivant
next;
}
# Si on trouve un numero de paragraphe
if ( $sLine =~ /^[0-9\.]+$/ ) {
# On en prend note
$sParagraphNumber = $sLine;
# On vide le nom de la variable du paragraphe precedent
$sVariableName = "";
# Et on passe au tour de boucle suivant
next;
}
# Si on trouve une ligne du style "variable:numero:[ |X|x]"
if ( $sLine =~ /^([^:]+):\s*([0-9]+)\s*:\s*\[([\sxX])\]$/ ) {
# On prend note du nom de la variable
$sVariableName = trim($1);
# Du numero associe
$nRank = $2;
# Et du drapeau d'affichage
$sDisplayFlag = $3;
# Sinon si on trouve une ligne du style "numero:[ |X|x]"
} else if ( $sLine =~ /^([0-9]+)\s*:\s*\[([\sxX])\]$/ ) {
# On prend note du numero
$nRank = $2;
# Et du drapeau d'affichage
$sDisplayFlag = $3;
# Sinon (format de ligne inconnu au bataillon)
} else {
# Et on passe au tour de boucle suivant
next;
}
# On passe au tour de boucle suivant si l'affichage de la variable n'est pas requis
next if ( $sDisplayFlag !~ /x/i );
# Si le numero de paragraphe n'est pas connu (variable trouvee avant la declaration d'un paragraphe)
if ( $sParagraphNumber eq "" ) {
# On indique l'erreur
printf STDERR ("#ERROR: found variable '%s', rank %d to display with unknown paragraph\n", $sVariableName, $nRank);
# Et on passe a la ligne suivante
next;
}
# Si on trouve un nom de variable vide (aucune variable déclarée dans le paragraphe avant de tomber sur une chaine du style "nombre:[ |x|X]")
if ( $sVariableName eq "" ) {
# On indique l'erreur
printf STDERR ("#ERROR: found unknown variable with rank %d to display in paragraph %s\n", $nRank, $sParagraphNumber);
# Et on passe a la ligne suivante
next;
}
# A ce stade, on a trouve des informations qui doivent être affichées
printf("#INFO: found variable '%s' with rank %d in paragraph '%s'\n", $sVariableName, $nRank, $sParagraphNumber);
} |
Partager