IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Extraire des informations multiples pour faire un fichier HTML à envoyer par mail.


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Mars 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2012
    Messages : 15
    Par défaut Extraire des informations multiples pour faire un fichier HTML à envoyer par mail.
    Bonjour à tous,

    Tout nouveau sur le forum, j'ai une tache a faire en script shell, avec une requete SQL (ca j'ai réussi), et un envoi de mail au format HTML (ca je sais faire). Vous vous direz alors pourquoi il poste sur le forum celui la ?
    Bin en fait c'est la partie intermédiaire que je ne vois pas comment faire.

    Voici le genre d'information (en restant précis au maximum, mais je suis contraint à la confidentialité des informations) que me revoit le SQL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    NomUtilisateur1;03/14/2012;TR1;CP2;RP1;DDI;0;4;102;Appli2;630;Fiche4;X
    NomUtilisateur1;03/14/2012;TR1;CP1;;DDI;0;3;10;Appli1;529;Fiche1;
    NomUtilisateur1;03/14/2012;TR1;CP1;;DDI;0;3;10;Appli1;531;Fiche2;
    NomUtilisateur1;03/14/2012;TR1;CP2;;DDI;0;4;102;Appli2;629;Fiche3;
    Dans l'ordre des colonnes :
    - Nom Utilisateur
    - Date de reference
    - Trigramme Utilisateur
    - Trigramme Chef de projet
    - Trigramme Responsable
    - Trigramme DSI
    - Quantité
    - Numéro préfixe
    - Numéro Appli
    - Nom Appli
    - Numéro Fiche
    - Nom Fiche
    - Urgent
    Et la sortie doit être :
    un tableau HTML affichant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    +----------------+
    | Date | Quantité |
    +----------------+
    et un second affichant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    +-----------------------------------------------------------------------+
    |Nom Appli | Urgent | Numéro Fiche | Nom Fiche | Trigramme Chef de projet|
    +-----------------------------------------------------------------------+
    Ces 2 tableaux se trouvant dans le mail envoyé à chaque utilisateur.

    Donc ma question est comment faire pour que à partir du reultat de ma requete je puisse remplir les 2 tableaux, sans qu'il y est de doublons dans les 2 tableaux ?
    Même une mise sur la voie me convient, car je ne suis pas un dieu du script shell et je ne connait que le B.A. BA. Dans ce cas je ne sais pas de quoi me servir pour effectuer l'opération.

    J'avais pensé utiliser une variable pour construire mes 2 tableaux et faire un check si les informations en cours ont déja été utilisé. Je bute sur comment trouver si la chaine recherchée est dans la chaine que j'ai contruit.
    Ou alors utiliser un programme comme AWK, mais je ne sais pas s'il peut faire ce genre de sortie.
    J'avoue ne pas connaitre très bien le shell, mis à part les bases simples (très simple).

    Je suis obligé de passer par un script shell.
    Mon OS est HP-UX
    et le shell est bin/sh

    Si des points vous semble manquer de précision je ferrais le maximum pour etre plus clair.

    Merci pour votre aide.

  2. #2
    Membre éprouvé Avatar de Levi59
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2011
    Messages : 58
    Par défaut
    Tu as un fichier d'entrée avec toutes les données? Si oui, un simple tri te permettra de supprimer les doublons :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    akira@virtualcrunchbang:~/tmp$ cat FichierEntree
    1
    4
    3
    1
    2
    4
    akira@virtualcrunchbang:~/tmp$ sort FichierEntree | uniq >FichierSortie
    akira@virtualcrunchbang:~/tmp$ cat FichierSortie
    1
    2
    3
    4
    Dis moi si je me trompe.

    EDIT :
    Le tri serais plus simple en stockant les dates au format : aaaa/mm/jj
    Après tu pourrais très bien formater comme tu veux dans les tableaux et autres.

  3. #3
    Membre averti
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Mars 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2012
    Messages : 15
    Par défaut
    Merci Levi59 d'avoir repondu a mon appel.

    En fait dans le résultat de la requete il n'y a pas de doublon, chaque ligne est unique. C'est ce que je vais devoir faire avec ce resultat qui va genere des doublons.
    Car il faut que je separe ce resultat de requete en 4 parties.
    - La première, c'est prendre les destinaitaires du mail par rapport à leur trigramme. Si je reprends l'exemple ca me donnerait ca pour le nomUtilisateur1 :
    TR1,CP2,RP1,DDI,TR1,CP1,DDI,TR1,CP1,DDI,TR1,CP2,DDI


    Ce qui est genant c'est que le logiciel servant a envoyé les mails envoie un mail a chaque destinataire, et autant de fois que demandé. dans l'exemple le DSI va recevoir 4 mails pour la même chose.
    Alors que le resultat recherché est : TR1,CP1,CP2,RP1,DDI (le tri n'est pas une obligation )

    - la seconde, c'est extraire le nom de l'utilisateur (nomUtilisateur1). Celui ci apparait dans l'objet du mail et sur la première ligne du mail. Il ne doit apparaitre qu'une seule fois bien sur.

    - la troisième, c'est genere le premier tableau HTML pour l'utilisateur 1 en créeant pour chaque date distincte une ligne avec la quantité (1 date = 1 quantité)

    - la quatrième c'est genere le second tableau HTML pour l'utilisateur 1 en crééant pour chaque couple Appli, numéro de fiche une ligne avec les informations comme defini dans le tableau de mon post original.

    Mon fichier fait aujourd'hui environ 1500 lignes et contient environ 20 utilisateurs différents. Le nombre de ligne par utilisateur est variable en fonction du nombre d'application qu'il utilise.

    pour faire cette separation je suis en train de regarder AWK, car je pense que l'outil peut m'aider, même si je ne le connais pas du tout.

    Je pense que le problème n'est pas simple du tout et que je vais souffrir pour analyser la faisabilité de cette demande.

    Merci a tous pour votre aide et si tu as d'autres idées Levi59 je suis preneur.

  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Par défaut
    Salut,

    Pourrais-tu, en fonction de tes dernières explications, nous mettre un exemple plus concret ?

    Je m'explique :

    - Dans ton 1er post et ton exemple il n'apparait qu'un seul nom d'utilisateur. Il serait bien d'en avoir au moins trois en exemple.
    - Et à partir de là, nous afficher concrètement les données exactes et finales qu'il faut retenir pour construire tes 2 tableaux ?

    Merci

  5. #5
    Membre averti
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Mars 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2012
    Messages : 15
    Par défaut
    Merci Zipe31.
    Voila donc un peu plus de lignes.
    NomUtilisateur1;14-MAR-12;TR1;CP2;RP1;DDI;0;3;8;Appli1;1500;Fiche1;
    NomUtilisateur1;14-MAR-12;TR1;CP2;RP1;DDI;0;3;8;Appli1;1523;Fiche2;
    NomUtilisateur1;14-MAR-12;TR1;CP2;RP1;DDI;0;3;8;Appli1;1524;Fiche3;
    NomUtilisateur1;14-MAR-12;TR1;CP2;RP1;DDI;0;3;8;Appli1;1526;Fiche4;
    NomUtilisateur2;14-MAR-12;TR2;RP1;;DDI;0;3;10;Appli2;529;Fiche5;
    NomUtilisateur2;14-MAR-12;TR2;RP1;;DDI;0;3;10;Appli2;531;Fiche6;
    NomUtilisateur2;14-MAR-12;TR2;CP3;DDI;;0;4;102;Appli3;629;Fiche7;
    NomUtilisateur3;14-MAR-12;CP1;;RP1;DDI;0;3;35;Appli4;369;Fiche8;
    NomUtilisateur3;14-MAR-12;CP1;;RP1;DDI;0;3;37;Appli5;300;Fiche9;
    NomUtilisateur3;14-MAR-12;CP1;;RP1;DDI;0;3;37;Appli5;353;Fiche10;
    NomUtilisateur3;14-MAR-12;CP1;CP3;RP1;DDI;0;3;37;Appli5;362;Fiche11;X
    NomUtilisateur3;14-MAR-12;CP1;CP3;RP1;DDI;0;3;47;Appli6;354;Fiche12;X
    NomUtilisateur3;14-MAR-12;CP1;;RP1;DDI;0;3;47;Appli6;368;Fiche13;
    NomUtilisateur3;14-MAR-12;CP1;;RP1;DDI;0;3;47;Appli6;372;Fiche14;
    NomUtilisateur3;14-MAR-12;CP1;;RP1;DDI;0;3;71;Appli7 Jour;141;Fiche15;
    NomUtilisateur3;14-MAR-12;CP1;;RP1;DDI;0;3;71;Appli7 Jour;143;Fiche16;
    NomUtilisateur3;14-MAR-12;CP1;;RP1;DDI;0;3;109;Appli8 soft;78;Fiche17;
    NomUtilisateur3;14-MAR-12;CP1;;RP1;DDI;0;3;316;Appli9;3;Fiche18;
    NomUtilisateur3;14-MAR-12;CP1;;RP1;DDI;0;3;326;Appli10;1;Fiche19;
    NomUtilisateur3;13-MAR-12;CP1;;RP1;DDI;0;3;35;Appli4;369;Fiche8;
    NomUtilisateur3;13-MAR-12;CP1;;RP1;DDI;0;3;37;Appli5;300;Fiche9;
    NomUtilisateur3;13-MAR-12;CP1;;RP1;DDI;0;3;37;Appli5;353;Fiche10;
    NomUtilisateur3;13-MAR-12;CP1;CP3;RP1;DDI;0;3;37;Appli5;362;Fiche11;X
    NomUtilisateur3;13-MAR-12;CP1;CP3;RP1;DDI;0;3;47;Appli6;354;Fiche12;X
    NomUtilisateur3;13-MAR-12;CP1;;RP1;DDI;0;3;47;Appli6;368;Fiche13;
    NomUtilisateur3;13-MAR-12;CP1;;RP1;DDI;0;3;47;Appli6;372;Fiche14;
    NomUtilisateur3;13-MAR-12;CP1;;RP1;DDI;0;3;71;Appli7 Jour;141;Fiche15;
    NomUtilisateur3;13-MAR-12;CP1;;RP1;DDI;0;3;71;Appli7 Jour;143;Fiche16;
    NomUtilisateur3;13-MAR-12;CP1;;RP1;DDI;0;3;109;Appli8 soft;78;Fiche17;
    NomUtilisateur3;13-MAR-12;CP1;;RP1;DDI;0;3;316;Appli9;3;Fiche18;
    NomUtilisateur3;13-MAR-12;CP1;;RP1;DDI;0;3;326;Appli10;1;Fiche19;
    NomUtilisateur3;12-MAR-12;CP1;;RP1;DDI;0;3;35;Appli4;369;Fiche8;
    NomUtilisateur3;12-MAR-12;CP1;;RP1;DDI;0;3;37;Appli5;300;Fiche9;
    NomUtilisateur3;12-MAR-12;CP1;;RP1;DDI;0;3;37;Appli5;353;Fiche10;
    NomUtilisateur3;12-MAR-12;CP1;CP3;RP1;DDI;0;3;37;Appli5;362;Fiche11;X
    NomUtilisateur3;12-MAR-12;CP1;CP3;RP1;DDI;0;3;47;Appli6;354;Fiche12;X
    NomUtilisateur3;12-MAR-12;CP1;;RP1;DDI;0;3;47;Appli6;368;Fiche13;
    NomUtilisateur3;12-MAR-12;CP1;;RP1;DDI;0;3;47;Appli6;372;Fiche14;
    NomUtilisateur3;12-MAR-12;CP1;;RP1;DDI;0;3;71;Appli7 Jour;141;Fiche15;
    NomUtilisateur3;12-MAR-12;CP1;;RP1;DDI;0;3;71;Appli7 Jour;143;Fiche16;
    NomUtilisateur3;12-MAR-12;CP1;;RP1;DDI;0;3;109;Appli8 soft;78;Fiche17;
    NomUtilisateur3;12-MAR-12;CP1;;RP1;DDI;0;3;316;Appli9;3;Fiche18;
    NomUtilisateur3;12-MAR-12;CP1;;RP1;DDI;0;3;326;Appli10;1;Fiche19;
    Le resultat attendu pour l'envoi de mail est :

    * Pour NomUtilisateur1

    en destinataire l'ensemble des trigrammes par lignes nomutilisateur1 mais de facon unique, soit : TR1,CP2,RP1,DDI

    Puis pour l'objet du mail : Nomutilisateur1, voici votre récapitulatif.

    Enfin le corps du mail :
    Bonjour Nomutilisateur1,
    
    Voici vos informations : 
    +------------------------+
    |    Date     | Quantité   |
    +------------------------+
    |14-MAR-12|      0        |
    +------------------------+
    
    Vos Apllications 
    +---------------------------------------------------------------------------------+
    |Nom Appli | Urgent | Numéro Fiche | Nom Fiche | Trigramme Chef de projet|
    +---------------------------------------------------------------------------------+
    |Appli1       |           |1500              |Fiche1        |CP2                               |
    |Appli1       |           |1523              |Fiche2        |CP2                               |
    |Appli1       |           |1524              |Fiche3        |CP2                               |
    |Appli1       |           |1526              |Fiche4        |CP2                               |
    +---------------------------------------------------------------------------------+
    * Pour Nomutilisateur2

    en destinataire l'ensemble des trigrammes par lignes nomutilisateur2 mais de facon unique, soit : TR2,CP3,RP1,DDI

    Puis pour l'objet du mail : Nomutilisateur2, voici votre récapitulatif.

    Enfin le corps du mail :
    Bonjour Nomutilisateur2,
    
    Voici vos informations : 
    +------------------------+
    |    Date     | Quantité   |
    +------------------------+
    |14-MAR-12|      0        |
    +------------------------+
    
    Vos Apllications 
    +---------------------------------------------------------------------------------+
    |Nom Appli | Urgent | Numéro Fiche | Nom Fiche | Trigramme Chef de projet|
    +---------------------------------------------------------------------------------+
    |Appli2       |           |530                |Fiche5        |RP1                               |
    |Appli2       |           |531                |Fiche6        |RP1                               |
    |Appli3       |           |629                |Fiche7        |CP3                               |
    +---------------------------------------------------------------------------------+
    *Pour NomUtilisateur3

    en destinataire l'ensemble des trigrammes par lignes nomutilisateur3 mais de facon unique, soit : CP1,CP3,RP1,DDI

    Puis pour l'objet du mail : Nomutilisateur3, voici votre récapitulatif.

    Enfin le corps du mail :
    Bonjour Nomutilisateur3,
    
    Voici vos informations : 
    +------------------------+
    |    Date     | Quantité   |
    +------------------------+
    |14-MAR-12|      0        |
    |13-MAR-12|      0        |
    |12-MAR-12|      0        |
    +------------------------+
    
    Vos Apllications 
    +---------------------------------------------------------------------------------+
    |Nom Appli | Urgent | Numéro Fiche | Nom Fiche | Trigramme Chef de projet|
    +---------------------------------------------------------------------------------+
    |Appli4       |           |369                |Fiche8       |CP1                               |
    |Appli5       |           |300                |Fiche9       |CP1                               |
    |Appli5       |           |353                |Fiche10     |CP1                               |
    |Appli5       |X         |362                |Fiche11     |CP3                               |
    |Appli6       |X         |354                |Fiche12      |CP3                               |
    |Appli6       |           |368                |Fiche13      |CP1                               |
    |Appli6       |           |372                |Fiche14      |CP1                               |
    |Appli7       |           |141                |Fiche15      |CP1                               |
    |Appli7       |           |143                |Fiche16      |CP1                               |
    |Appli8       |           |78                  |Fiche17      |CP1                               |
    |Appli9       |           |3                    |Fiche18      |CP1                               |
    |Appli10     |           |1                    |Fiche19      |CP1                               |
    +---------------------------------------------------------------------------------+

    Voila 3 exemples de mails tirés des données.

    En revanche je me suis rendu compte que j'ai oublié une regle dans les destinataires et qui a son importance aussi, en reprenant certaines lignes pour rédiger le contenu du mail.
    Au niveau des trigramme dans certain cas il y a des vides, c'est parce que le trigramme est déjà présent avant sur la ligne. Je m'explique :
    TR1;CP2;RP1;DDI => ca c'est une ligne normale.
    TR2;RP1;;DDI => revient à TR2;RP1;RP1;DDI
    CP1;;RP1;DDI => revient à CP1;CP1;RP1;DDI
    RP1;;;DDI => revient à RP1;RP1;RP1;DDI
    TR1;DDI;; => revient à TR1;DDI;DDI;DDI
    DDI;;; => revient à DDI;DDI;DDI;DDI
    En sachant comme expliquer au dessus pour le nom des colonnes, l'ordre est :
    Utilisateur;chef de projet;responsable;DSI
    Voila j'espère avoir donné toutes les informations attendues.

    Encore merci pour votre aide.

  6. #6
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Par défaut
    Oula, ce n'est plus un script qu'il te faut c'est une usine à gaz

    Même si j'entrevois certaines briques du puzzle, j'ai du mal à assembler le tout

    Déjà est-ce que SQL ne pourrait pas en partie mâcher le boulot ? Comme il faut séparer chaque utilisateur, ne serait-il pas plus judicieux d'extraire ces parties là séparément avec des requêtes SQL ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] Extraire des informations d'un nom de fichier
    Par minkovclub dans le forum MATLAB
    Réponses: 7
    Dernier message: 27/09/2011, 17h15
  2. fichiers zipés à envoyer par mail
    Par jano_dave dans le forum Web & réseau
    Réponses: 6
    Dernier message: 19/09/2009, 02h08
  3. Réponses: 1
    Dernier message: 11/12/2008, 14h44
  4. Réponses: 11
    Dernier message: 08/10/2007, 13h15
  5. Extraire des informations précises d'un fichier
    Par cameleon33 dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 14/10/2006, 13h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo