[Résolu][Perl]Formatage de donnée pour envoi de mail

Formatage de donnée pour envoi de mail [Résolu][Perl] - Perl - Programmation

Marsh Posté le 24-12-2012 à 00:22:14    

Bonjour,
 
Mon but est d'envoyer un mail contenant des données bien formatées.
J'ai plusieurs colonnes et chacune doivent être bien alignées.
Cependant j'ai une colonne titre qui peut varier de 1 à 35 caractères et c'est cette colonne qui me pose le plus de problème (car elle est en seconde position et j'ai d'autres colonnes derrière).
 
En utilisant le format, que je redirige vers STDOUT ou dans un fichier, mes données s'affichent parfaitement bien.
Cependant dans je renvoi cela dans une variable $body qui sera insérée dans un mail cela ne ressemble plus à rien.
 
J'ai essayé de ne pas passer par un format mais par du sprintf et une variable avec un \t comme séparateur, mais vu que la taille de la colonne titre varie, et bien mon \t doit aussi varier et c'est très dur à gérer.
 
J'utilise MIME::Lite pour mes mails, mais je ne vois pas comment afficher la même chose dans mon mail que dans STDOUT en utilisant le format.
 
Bref je suis ouvert à toutes propositions, si pour vous cette explication reste assez clair.
Merci d'avance.
 
Ci-dessous mon fichier source qui s'appelle "noel":

Code :
  1. 1|Le Pole Express|291|1.9900
  2. 2|Un Bonheur N'arrive Jamais Seul|78|3.9900
  3. 3|Il N'est Jamais Trop Tard|49|3.9900
  4. 4|Sur La Piste Du Marsupilami|46|3.9900
  5. 5|Charlie Et La Chocolaterie - VM|43|1.9900
  6. 6|Twilight - Chapitre 3 : Hesitation|43|2.9900
  7. 7|Bowling|40|3.9900
  8. 8|Happy Feet - VM|40|1.9900
  9. 9|Les Looney Tunes Passent à L'action|38|1.9900
  10. 10|Twilight - Chapitre 4 : Revelation |38|3.9900
  11. 11|Harry Potter Et La Coupe De Feu|37|3.9900
  12. 12|Space Jam|35|1.9900
  13. 13|Star Wars : The Clone Wars - VM|35|3.9900
  14. 14|Chasseurs De Dragons|27|2.9900
  15. 15|La Guerre Des Boutons|25|4.9900
  16. 16|Les Goonies|24|1.9900
  17. 17|Voyage Au Centre De La Terre 2 : L'|22|4.9900
  18. 18|Dark Shadows - VM|20|4.9900
  19. 19|Harry Potter A L'ecole Des Sorciers|18|3.9900
  20. 20|Twilight - Chapitre 2 : Tentation|18|2.9900
  21. 21|Sherlock Holmes|17|3.9900
  22. 22|Chicken Run|14|2.9900
  23. 23|Harry Potter Et L'ordre Du Phenix|13|3.9900
  24. 24|Lucas, Fourmi Malgre Lui|13|1.9900
  25. 25|Moonrise Kingdom - VM|13|4.9900
  26. 26|Le Gruffalo|12|3.9900
  27. 27|Harry Potter Et Le Prisonnier D'azk|11|3.9900
  28. 28|Twilight - Chapitre 1 : Fascination|11|3.9900
  29. 29|Les Chimpanzes De L'espace 2|10|3.9900
  30. 30|Panique Au Village|4|2.9900


 
Voici mon script:

Code :
  1. #!/usr/bin/perl -w
  2. use strict;
  3. use warnings;
  4.  
  5. # Global Variables
  6. my $DIR="/home/scripts/";
  7. my $NAME_OUTPUT_FILE = "noel";
  8. my $OUTPUT_FILE = $DIR . sprintf($NAME_OUTPUT_FILE);
  9. my ($TITRE,$PRIX,$VOLUME,$NB) = (0,0,0,0);
  10.  
  11. # Format
  12. format STDOUT_TOP =
  13.  @||||||||||||||||||||||||||||||||||||
  14.  "----C'est la Magie de NOEL----"
  15.  
  16.  N  Titre                                      Volume       Prix
  17.  -  --------------------------                  -----       ----
  18. .
  19. format STDOUT =
  20. @##: @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< @##### @######.##
  21. $NB, $TITRE,                                    $VOLUME,    $PRIX
  22. .
  23.  
  24. open(OUT, "<", $OUTPUT_FILE);
  25. while (<OUT> ) {
  26.        chomp;
  27.        my @tab = split(/\|/, $_);
  28.        ($NB,$TITRE,$VOLUME,$PRIX) = ($tab[0],$tab[1],$tab[2],$tab[3]);
  29.        write(STDOUT);
  30. }
  31. close(OUT);
  32. __END__


 
Voici l'écran de résultat:

Code :
  1. ----C'est la Magie de NOEL----
  2.   N  Titre                                      Volume       Prix
  3.   -  --------------------------                  -----       ----
  4. 01: Le Pole Express                               291       1.99
  5. 02: Un Bonheur N'arrive Jamais Seul                78       3.99
  6. 03: Il N'est Jamais Trop Tard                      49       3.99
  7. 04: Sur La Piste Du Marsupilami                    46       3.99
  8. 05: Charlie Et La Chocolaterie - VM                43       1.99
  9. 06: Twilight - Chapitre 3 : Hesitation             43       2.99
  10. 07: Bowling                                        40       3.99
  11. 08: Happy Feet - VM                                40       1.99
  12. 09: Les Looney Tunes Passent à L'action            38       1.99
  13. 10: Twilight - Chapitre 4 : Revelation             38       3.99
  14. 11: Harry Potter Et La Coupe De Feu                37       3.99
  15. 12: Space Jam                                      35       1.99
  16. 13: Star Wars : The Clone Wars - VM                35       3.99
  17. 14: Chasseurs De Dragons                           27       2.99
  18. 15: La Guerre Des Boutons                          25       4.99
  19. 16: Les Goonies                                    24       1.99
  20. 17: Voyage Au Centre De La Terre 2 : L'            22       4.99
  21. 18: Dark Shadows - VM                              20       4.99
  22. 19: Harry Potter A L'ecole Des Sorciers            18       3.99
  23. 20: Twilight - Chapitre 2 : Tentation              18       2.99
  24. 21: Sherlock Holmes                                17       3.99
  25. 22: Chicken Run                                    14       2.99
  26. 23: Harry Potter Et L'ordre Du Phenix              13       3.99
  27. 24: Lucas, Fourmi Malgre Lui                       13       1.99
  28. 25: Moonrise Kingdom - VM                          13       4.99
  29. 26: Le Gruffalo                                    12       3.99
  30. 27: Harry Potter Et Le Prisonnier D'azk            11       3.99
  31. 28: Twilight - Chapitre 1 : Fascination            11       3.99
  32. 29: Les Chimpanzes De L'espace 2                   10       3.99
  33. 30: Panique Au Village                              4       2.99


Message édité par Sethenssen le 22-12-2013 à 15:36:15
Reply

Marsh Posté le 24-12-2012 à 00:22:14   

Reply

Marsh Posté le 26-12-2012 à 12:49:39    

Bonjour,
>> Cependant dans je renvoi cela dans une variable $body qui sera insérée dans un mail cela ne ressemble plus à rien.  
C'est à dire? cela ne ressemble plus à rien quand on affiche dans un mailer avec des fontes à taille variable?
Deux possibilités:
- forcer l'utilisation de fontes a taille fixe
- mettre le contenu dans un tableau HTML
Sinon, je ne vois pas trop, vu que l'affichage va dépendre du mailer d'arrivée (et éventuellement de son interprétation de \t en nombre de blancs, ce qui varie de 4 à 8 il me semble)
 
A+,


Message édité par gilou le 26-12-2012 à 12:54:20

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 27-12-2012 à 09:22:52    

Bonjour Gilou,
 
C'est noté, je vais essayer dans cette voie.
Merci.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed