Bonjour ,

Ci après mon code qui me permet de "fabriquer" mes tableaux pour un affichage à l'écran de données , décomposé en plusieurs fonctions.

Hors mon problème est que le fait d'appliquer une couleur à une chaine de caractères , modifie aussi sa longueur , ce qui est gênant dans mon affichage.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
sub color {
    $couleur = @_[0];
    $texte = @_[1];
    %def_couleur = (
        rouge         => 31,
        vert          => 32,
        jaune         => 33,
        bleu          => 34,
        violet        => 35,
        turquoise     => 36,
        gris          => 37,
        rouge_inv     => 41,
        vert_inv      => 42,
        jaune_inv     => 43,
        bleu_inv      => 44,
        violet_inv    => 45,
        turquoise_inv => 46,
        gris_inv      => 47,
    );
    $texte_couleur = "\033[".$def_couleur{$couleur}."m".$texte."\033[m";
    return "$texte_couleur";
}
 
sub tableau {
    $taille = @_[0];
    $texte = @_[1];
    $taille = $taille-2;
    if ( $texte eq "-" ) {
        $ligne = "+"."-"x$taille."+\n";
    }
    else {
        $ligne ="| ".$texte." |\n";
    }
    return $ligne ;
}
 
sub centre {
    $taille = @_[0];
    $texte = @_[1];
    $long = $taille - length ($texte) -4;
    $demi = int($long/2);
    $reste = $long%2;
    $texte = " "x$demi.$texte." "x$demi." "x$reste;
    return $texte;
}
 
sub gauche {
    $taille = @_[0];
    $texte = @_[1];
    $long = $taille - length ($texte) -4;
    $texte = $texte." "x$long;
    return $texte;
}
 
sub droite {
    $taille = @_[0];
    $texte = @_[1];
    $long = $taille - length ($texte) -4;
    $texte = " "x$long.$texte;
    return $texte;
}
 
 
$t = 80;
print tableau ($t,"-");
print tableau ($t,gauche($t,"Essai de tableau"));
print tableau ($t,droite($t,"Essai de tableau"));
print tableau ($t,centre($t,color(vert_inv,"Essai de tableau")));
print tableau ($t,"-");
 
$texte1 = color(vert_inv,"Essai de tableau");
$texte2 = "Essai de tableau";
 
$l1 = length ($texte1);
$l2 = length ($texte2);
 
print "$l1 - $l2";
donne :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
+------------------------------------------------------------------------------+
| Essai de tableau                                                             |
|                                                             Essai de tableau |
|                          Essai de tableau                            |
+------------------------------------------------------------------------------+
25 - 16
Existe t-il une solution à mon pb ?
Merci pour votre aide