Print seulement si différent de 0
Salut,
Désolé pour le titre mais je sais pas trop comment condenser ça :lol:
Bref, voilà ce que j'aimerais faire.
J'ai cette fonction :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| sub M2DHM {
my $minutes = shift;
chomp $minutes;
# Si les minutes retournées par mencoder sont égales à 0, alors on retourne 'estimation en cours'
if ( $minutes eq 0 ) {
return ( sprintf 'Estimation en cours');
}
# Si c'est pas égal à 0, alors calcul
else {
my $jours = int($minutes/1440);
$minutes -= $jours * 1440;
my $hours = int($minutes/60);
$minutes -= $hours * 60;
# TODO : n'afficher que ce qui est différent de zero
return sprintf '%02d jour(s), %02d heure(s) et %02d minute(s)', $jours, $hours, $minutes;
}
} |
Qui me permet de convertir des minutes en jours, heures minutes.
Je l'appelle dans mon script de cette mannière :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| my $video_encod = new IO::Pipe();
$video_encod->reader("mencoder -nosound -dvd-device /home/jerome/VIDEO_TS dvd://1 -vf crop=720:576:0:0 -of rawvideo -ovc x264 -x264encopts bitrate=1000:pass=1:subq=4:8x8dct:me=dia:frameref=5:bframes=2:b_pyramid:weight_b:direct_pred=auto:partitions=all:qcomp=0.75:ip_factor=1.10:pb_factor=1.40 -o /dev/null");
{
local $/ = "\r";
my $runtime;
while( defined( my $line = $video_encod->getline ) ) {
# Pour info (pourcentage) $1 = '((\s{0,1}\d+%)\)', (fps) $2 = '([\d\.]+s)' et (temps restant) $3 = '(\d+)'
# Ligne de mencoder lors du lancement :
# Pos: 0.0s 1f ( 0%) 0.00fps Trem: 0min 0mb A-V:0.000 [0:0]
if ( $line =~ m/Pos:\s{0,3}?[\d\.]+s\s{0,6}?\d+f\s{1}?\((\s{0,1}\d+%)\)\s{0,2}?([\d\.]+)fps\s{1}?Trem:\s{0,3}?(\d+)min.*$/ ) {
$runtime = M2DHM($3); # Utilisation de la fonction calcul m > j:h:m
print " Temps restant : $runtime, $1 terminé, Vitesse : $2 fps\r";
}
else {
print " Estimation en cours ...\r";
}
}
} |
Voilà ce que ca donne dans mon shell :
Citation:
Temps restant : 00 jour(s), 00 heure(s) et 58 minute(s), 0% terminé, Vitesse : 21.88 fps
J'aimerais un petit coup de main pour que la fonction ne retourne pas les jours si ceux-ci sont égales à 0 et ainsi de suite.
Par exemple si jours = 0 et heures = 0 alors :
Citation:
Temps restant : 58 minute(s), 0% terminé, Vitesse : 21.88 fps
Merci d'avance :aie:
A noter que j'avais déjà essayer avec des if / elsif mais c'est un joli bordel :bug:
Jjeje007