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

  1. #1
    Futur Membre du Club
    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
    Points : 6
    Points
    6
    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 habitué 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
    Points : 148
    Points
    148
    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.
    Carpe Diem

  3. #3
    Futur Membre du Club
    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
    Points : 6
    Points
    6
    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 éminent

    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
    Points : 6 276
    Points
    6 276
    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
    $ man woman
    Il n'y a pas de page de manuel pour woman.

  5. #5
    Futur Membre du Club
    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
    Points : 6
    Points
    6
    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 éminent

    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
    Points : 6 276
    Points
    6 276
    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 ?
    $ man woman
    Il n'y a pas de page de manuel pour woman.

  7. #7
    Futur Membre du Club
    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
    Points : 6
    Points
    6
    Par défaut
    Ouf ! dans un sens ca me rassure quand à la complexité de la demande.

    Je comprends bien ta vision, j'y ai aussi pensé, mais je ne sais pas avant de lancer la requete Oracle combien de personnes vont être impacté. Il y a plus de 350 personnes dans la societe.

    Par contre je pensais decouper le fichier extrait par la requete, en plusieurs fichiers et ensuite extraire les informations de chacun de ces fichiers pour envoyer les mails.

    Moi aussi j'ai quelques idées, mais je ne sais pas encore comment les assembler, et le pire c'est que je ne sais pas forcement comment mettre mes idées en place. J'ai plus l'habitude du SQL.

    Le shell sera lancé par un cron. Pour le moment tous les scripts que j'ai fait était simple et regroupait tous dans le script lancé par le cron, la je vais devoir peut être faire autrement.

    Si je pouvais faire en sorte de "voir" chaque fichier (dans le cas ou il serait possible de scinder le fichier de la requete) comme une table, l'extraction des information serait simple, enfin je pense, car je ne sais pas si on peux faire tout ca en shell.

  8. #8
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 391
    Points
    19 391
    Par défaut
    Bonjour,

    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
    #!/usr/bin/gawk -f
     
    BEGIN{
       FS = ";" 
    }
    {
    # Quand l'utilisateur change
       if( nomU && $1 != nomU){
       print nomU
       # Afficher tableaux
       n = asorti(tbl1,tbl3)
       for(i = 1; i <= n; i++) print "\t"tbl3[i]
     
       n = asorti(tbl2,tbl4)
       for(i = 1; i <= n; i++ ) print "\t\t"tbl4[i]
       #  Purger tableaux
          delete tbl1; delete tbl2
       }   
     
       nomU = $1
     
       dateRef = $2
       Quant = $7
       sub(" .*","",$10)
       nomAppli = $10 
       Urgent = $13 
       numFiche = $11 
       nomFiche = $12 
       chefProG = $4
     
       T01 = dateRef" | "Quant
       tbl1[T01]++
       T02 = "| "nomAppli" | "Urgent" | "numFiche" | "nomFiche" | "chefProG" |"
       tbl2[T02]++
     
    }
    END {
       print nomU
       # Afficher tableaux
       n = asorti(tbl1,tbl3)
       for(i = 1; i <= n; i++) print "\t"tbl3[i]
     
       n = asorti(tbl2,tbl4)
       for(i = 1; i <= n; i++ ) print "\t\t"tbl4[i]
    }
    rien de bien compliquer, en fait.
    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
    ./script.awk fichier.in
    NomUtilisateur1
    	14-MAR-12 | 0
    		| Appli1 |  | 1500 | Fiche1 | CP2 |
    		| Appli1 |  | 1523 | Fiche2 | CP2 |
    		| Appli1 |  | 1524 | Fiche3 | CP2 |
    		| Appli1 |  | 1526 | Fiche4 | CP2 |
    NomUtilisateur2
    	14-MAR-12 | 0
    		| Appli2 |  | 529 | Fiche5 | RP1 |
    		| Appli2 |  | 531 | Fiche6 | RP1 |
    		| Appli3 |  | 629 | Fiche7 | CP3 |
    NomUtilisateur3
    	12-MAR-12 | 0
    	13-MAR-12 | 0
    	14-MAR-12 | 0
    		| Appli10 |  | 1 | Fiche19 |  |
    		| Appli4 |  | 369 | Fiche8 |  |
    		| Appli5 |  | 300 | Fiche9 |  |
    		| Appli5 |  | 353 | Fiche10 |  |
    		| Appli5 | X | 362 | Fiche11 | CP3 |
    		| Appli6 |  | 368 | Fiche13 |  |
    		| Appli6 |  | 372 | Fiche14 |  |
    		| Appli6 | X | 354 | Fiche12 | CP3 |
    		| Appli7 |  | 141 | Fiche15 |  |
    		| Appli7 |  | 143 | Fiche16 |  |
    		| Appli8 |  | 78 | Fiche17 |  |
    		| Appli9 |  | 3 | Fiche18 |  |
    Il serait préférable de mettre l'affichage des tableaux dans une fonction.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  9. #9
    Futur Membre du Club
    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
    Points : 6
    Points
    6
    Par défaut
    Wouah !!! Merci beaucoup N_BaH.

    Essaie tout ca demain matin en arrivant au bureau.
    Je vais modifié ma requete pour ne plus enlever les doublons dans les trigrammes.

    Je suppose que l'on peut faire la même chose pour les destinataires (liste des trigrammes pour 1 nomUtilisateur et sans doublons) ?

    Maintenant une bonne dose d'aspirine pour comprendre la commande AWK.

    Je reste . Respect.

  10. #10
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 391
    Points
    19 391
    Par défaut
    Je suppose que l'on peut faire la même chose pour les destinataires (liste des trigrammes pour 1 nomUtilisateur et sans doublons) ?
    probablement, mais comment faire ? par exemple, pour l'utilisateur3, parfois le Responsable apparaît, parfois pas...
    ?
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  11. #11
    Futur Membre du Club
    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
    Points : 6
    Points
    6
    Par défaut
    Oui je sais, j'avais fait en sorte que la requete fasse un pre traitement en supprimant les cas ou il y aurait des doubles sur une ligne.

    Je vais modifier ma requete pour qu'elle ne fasse plus ce traitement et resorte les informations comme dans l'exemple ci dessous:
    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
    Par contre j'ai une autre question, et je pense que la réponse est 'NON'.
    Depuis AWK peux-t-on executer une ligne de commande ?
    Je m'explique, lorsque le traitement pour l'utilisateur 1 est fini et avant de commencer le traitement pour l'utilisateur 2, le mail de l'utilisateur 1 doit partir avec les informations extraites et remises en forme au format HTML.
    Car au final 1 mail part par utilisateur, avec toutes ses informations (celle ci etant strictement personelle, les autres utilisateurs ne doivent pas en avoir connaissance, hormis le CP du projet et sa hierarchie)
    Nous utilisons FDMailer qui permet l'envoi en HTML.

    Encore merci pour ton aide et tes lumières.

  12. #12
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 391
    Points
    19 391
    Par défaut
    Depuis AWK peux-t-on executer une ligne de commande ?
    si, c'est possible.
    Mais, je pensais faire autrement, en ajoutant avant le nomUtilisteur[n]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print "cat <<eof | mail -s\"sujet...\" -c\"tri,gra,m,mes\""
    (plus ou moins), et après l'affichage des tableaux print "oef", et finalement "piper" la sortie de la commande awk à sh
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ./script.awk fichier.in | /bin/sh
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  13. #13
    Futur Membre du Club
    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
    Points : 6
    Points
    6
    Par défaut
    Alors je viens d'avoir un peu de temps pour tester et essayer de comprendre le script. Je pense l'avoir compris. Je ne suis pas encore hyper fort en awk, je suis plutot une bille pour le moment.

    J'ai betement fait un copier / coller de ton script pour essayer et en l'executant j'ai :

     syntax error The source line is 21.
     The error context is
                          delete tbl1 >>>  ; <<<
     awk: The statement cannot be correctly parsed.
     The source line is 21.
    
    Pour info nous n'avons pas gawk, seulement awk. j'ai donc modifier la première ligne comme suit :
    J'ai essayé sur 2 lignes, sans le ';' car il semble que c'est lui qui pose un problème.

    Je m'envoie tout à la maison pour poursuivre ce WE. je ferai tourner ca sur une RH.
    Si tu as une idée sur l'erreur.

    En tout cas je savais AWK puissant mais je suis enchanté par ce qu'il peut faire.

  14. #14
    Futur Membre du Club
    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
    Points : 6
    Points
    6
    Par défaut
    Bonjour à tous,
    ce week-end j'ai bien avancé.
    Je n'ai plus l'erreur due au ';'.

    Comme ce n'est pas gawk que j'ai de disponible, mais simplement AWK, j'ai du changer un peu le code de N_BaH.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    delete tbl1 ; delete tbl2
    a été transformé en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for(i in tbl1)
     delete tbl1[i]
    for(i in tbl2)
     delete tbl2[i]
    Maintenant N_BaH a utilisé une fonction de tri asorti(). Or dans la version AWK les fonction asort() et asorti() n'existe pas, il faut passer par le shell pour faire un tri.

    En tout cas encore Merci N_BaH pour ce bout de code qui m'a mis sur la voie, même si je dois essayer de l'adapter pour AWK et pour mon besoin (générer un HTML, j'ai vu ce week-end comment faire)

    Le post n'est pas encore fini, car j'aurai besoin d'aide peut-être pour finaliser le coté expédition du mail. Même si j'ai eu un indice par N_BaH, je ne m'y suis pas encore pencher dessus.

  15. #15
    Futur Membre du Club
    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
    Points : 6
    Points
    6
    Par défaut
    Pour continuer à avancer, je me suis dit que les tris n'etaient pas une obligation (est ce que je me trompe ?).
    donc j'ai fait des modifications, pour rester compatible avec AWK.
    Pour rester dans le schéma directeur de N_BaH (voir l'exemple plus haut)
    le remplissage du tableau se fait comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
       T01 = dateRef" | "Quant" |"
       print T01
       tbl1[T01]++
       T02 = nomAppli" | "Urgent" | "numFiche" | "nomFiche" | "chefProG" | "
       print T02
       tbl2[T02]++
    et la restitution ce fait comme ca (j'ai ajouté la variable i pour savoir ou je suis) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
       print nomU
       # Afficher tableaux
       #n = asort(tbl1)
       #n = asort(tbl3)
       n = 0
       for(i in tbl1) n++
       print n
       for(i = 1; i <= n; i++) print i"-"tbl1[i]
       #n = asort(tbl2)
       #n = asort(tbl4)
       n = 0
       for(i in tbl2) n++
       print n
       for(i = 1; i <= n; i++ ) print i"-"tbl2[i]
    Et voici mon resultat
    NomUtilisateur12
    2
    1-
    2-
    23
    1-
    2-
    3-
    4-
    5-
    6-
    7-
    8-
    9-
    10-
    11-
    12-
    13-
    14-
    15-
    16-
    17-
    18-
    19-
    20-
    21-
    22-
    23-
    
    Voila je n'ai rien dans le tableau si j'en crois l'affichage. Or le Print de T01 ou T02 affiche bien des données.

    Au secours ! Ou ai je foiré mon coup ? En cherchant sur le net cette façon de remplir un tableau serait compatible avec AWK, donc je ne vois pas pourquoi mon tableau a bien le bon nombre de ligne, mais pourquoi sont elles vide, c'est toute la question.

    Avant d'aller plus loin j'ai aussi testé la longeur avec un Length(tbl1[i]) et un Length(tbl2[i]), les deux me retourne 0.

    Pourquoi la chaine n'a pas été stockée dans le Array ?

    Merci par avance pour votre aide.

  16. #16
    Futur Membre du Club
    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
    Points : 6
    Points
    6
    Par défaut
    Quand on débute on fait des erreurs grossières.
    Voila le code que j'aurai du mettre pour restituer mon tableau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     for(i in tbl1) print i
     for(i in tbl2) print i
    Ouf !!!

  17. #17
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 391
    Points
    19 391
    Par défaut


    parce que si asort() n'est pas utilisée, les tableaux restent des tableaux associatifs (ils n'ont donc pas d'index numérique).
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  18. #18
    Futur Membre du Club
    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
    Points : 6
    Points
    6
    Par défaut
    Merci Grand N_BaH.

    Par contre je n'ai pas compris le principe pour envoyer le mail.
    Mais, je pensais faire autrement, en ajoutant avant le nomUtilisteur[n]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print "cat <<eof | mail -s\"sujet...\" -c\"tri,gra,m,mes\""
    (plus ou moins), et après l'affichage des tableaux print "eof", et finalement "piper" la sortie de la commande awk à sh
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ./script.awk fichier.in | /bin/sh
    Et la il va falloir que je creuse. Mais j'aime ca. ca entretien le demi neurone.

  19. #19
    Futur Membre du Club
    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
    Points : 6
    Points
    6
    Par défaut
    Concernant l'envoi des informations extraites et correctement mise en forme (merci à N_BaH pour sa mise sur la voie), je n'arrive pas à mettre en place l'envoi du mail.
    - J'ai essayé l'idée de N_BaH, ca me renvoie une erreur de syntaxe.
    - En cherchant j'ai trouvé la fonction systeme(), qui me permet bien de faire partir les mails, mais ils sont vides (je doit être proche avec cette méthode, mais je ne vois pas ou ca coince). Je stocke les informations issu de la mise en forme AWK dans le variable MailBody. Nous utilisons fdMailer et habituellement lorsque j'envoie un mail par ce programme j'utilise la ligne de commande shell suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "$MAIL_BODY" | fdMailer -F email.conf.nde -s "Votre information personelle" "foo@foo.fr"
    donc j'ai essayé de l'adapter, mais rien a faire. j'ai bien 25 mails envoyés, mais avec un 'body' vide et le sujet ne contient pas le nomU comme demandé.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
       MailBody="\"<HTML>"
       ...
       MailBody=MailBody "</HTML>\""
       system("MailBody="MailBody)
       system("echo \"$MailBody\" | fdMailer -F email.conf.nde -s \""trim(NomU)". Votre activité et ses informations techniques\" \"foo@foo.fr\"")
    - J'ai essayé avec cmd et cmd|getline, mais ca ne reponds pas au besoin (1 seul mail et vide)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
      MailBody="\"<HTML>"
       ...
       MailBody=MailBody "</HTML>\""
       cmd="MailBody="MailBody
       cmd|getline
       cmd="echo \"$MailBody\" | fdMailer -F email.conf.nde -s \""trim(NomU)". Votre activité et ses informations techniques\" \"foo@foo.fr\""
       cmd|getline
    Dans tous les cas si à la sortie du script je fait, en shell, echo $MailBody, je n'ai rien.

    Si une bonne âme a de quoi eclairer ma lanterne avec une idée qui me permettrai d'en finir avec ce script, je suis, vous vous en douter, preneur.

    Par avance Merci.

  20. #20
    Futur Membre du Club
    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
    Points : 6
    Points
    6
    Par défaut
    Voila ca y est tout est bon. Merci Tilowil01 .

    C'etait vraiment tout bête.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
       MailBody="\"<HTML>"
       ...
       MailBody=MailBody "</HTML>\""
       cmd="MailBody="MailBody";"
       cmd=cmd"echo \"$MailBody\" | fdMailer -F email.conf.nde -s \""trim(nomU)". Votre activité et ces informations techniques\" \"foo@foo.fr\""
       system(cmd)
    En effet le shell permet de lancer plusieurs commande en les separant par un ;. Je lance donc mes 2 commandes par la même fonction system(). Donc pas de perte de données lors de la fermeture de l'appel systeme.

    Quand au nomUtilisateur qui n'apparaissait pas. Quand on ne sait pas faire la différence entre une majuscule et une minuscule, ce sont des choses qui arrivent...

    Il ne me reste plus qu'a trouvé l'emplacement du bouton "Résolu", surement la tache la plus compliqué de ce post

    Merci à tous ceux qui m'ont apporté leur aide - N_BaH, Zipe31 et Levi59.
    J'espère que ce post servira à d'autres.

+ 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