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

Python Discussion :

Tri d'un fichier texte


Sujet :

Python

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 54
    Points : 9
    Points
    9
    Par défaut Tri d'un fichier texte
    Bonjour,


    Je début en python, je cherche le moyen de recuperer un fichier txt qui ce presente de la forme suivante

    04/02/08 19:40:07 CLVCPTA15001 nviOccManCmd OC_NUL

    04/02/08 19:40:07 CLVCPTA15001 nvoSpaceTemp 24.17

    04/02/08 19:40:07 CLVCPTA15001 nviSetptOffset 0.00

    04/02/08 19:40:07 CLVCPTA15002 nviOccManCmd OC_STANDBY

    04/02/08 19:40:07 CLVCPTA15002 nvoSpaceTemp 24.10

    04/02/08 19:40:07 CLVCPTA15002 nviSetptOffset 327.67

    04/02/08 19:40:08 CLVCPTA15003 nviOccManCmd OC_NUL

    04/02/08 19:40:08 CLVCPTA15003 nvoSpaceTemp 24.17

    04/02/08 19:40:08 CLVCPTA15003 nviSetptOffset 0.00

    04/02/08 19:40:08 CLVCPTA15004 nviOccManCmd OC_STANDBY

    04/02/08 19:40:08 CLVCPTA15004 nvoSpaceTemp 24.59

    04/02/08 19:40:08 CLVCPTA15004 nviSetptOffset 327.67


    je cherche le moyenne de crée une liste puis pouvoir resortir toutes les variables nviOccManCmd qui sont en standby dans mon fichier dans un autre fichier texte.
    Je ne sais pas comment m'y prendre .


    Merci de votre aide

  2. #2
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Points : 1 658
    Points
    1 658
    Par défaut
    Bonjour,

    C'est quoi une variable nviOccManCmd ? Le contenu de la ligne ? Ce qui est après "nviOccManCmd" ?
    Ça veut dire quoi "variables nviOccManCmd qui sont en standby dans mon fichier " ?
    Ça veut dire quoi "resortir des variables dans un autre fichier texte" ? Enregistrer les valeurs des variables dans un autre fichier ?

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 54
    Points : 9
    Points
    9
    Par défaut
    Je souhaite filtré le fichier de telle sorte qu'il reste que les lignes ou le mot standby est ecrit et le resultat obtenu soit inscrit dans un autre fichier de sortie.

    voici ce que je veut obtenir.

    04/02/08 19:40:07 CLVCPTA15002 nviOccManCmd OC_STANDBY
    04/02/08 19:40:08 CLVCPTA15004 nviOccManCmd OC_STANDBY

    nviOccManCmd est le nom d'un variable utiliser par un automate.

    Par la suite je cherche a faire d'autre filtre sur d'autre variable.

  4. #4
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Points : 1 658
    Points
    1 658
    Par défaut
    En supposant que le fichier à filtrer est sur le disque dur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    f = open('fichier a lire','r')
    frec = open('fichier receveur','w')
    for ln in f:
        if ln.count('STANDBY')==1:
            frec.write(ln)
    f.close()
    frec.close()
    Attention, Python fait la différence entre STANDBY' et 'standby'


    Si tu es sûr que dans le fichier à filtrer, le mot STANDBY qui doit déclencher la conservation de la ligne, ne peut jamais se trouver ailleurs qu'entre les positions 47 et 54 de la chaine de caractères qu'est une ligne ln ( ln[0] étant le premier caractère, ln[1] le deuxième etc) , tu peux aussi utiliser:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    f = open('fichier a lire','r')
    frec = open('fichier receveur','w')
    for ln in f:
        if ln[47:54]=='STANDBY":
            frec.write(ln)
    f.close()
    frec.close()
    Si le fichier est gros, ce sera plus rapide.


    Il n'est pas possible de faire autrement que de créer un autre fichier pour mettre le résultat du filtrage: on ne peut pas enlever des bytes sur un disque dur entre certains caractères. Si le fichier une fois filtré n'est plus utile, tu peux l'éliminer par remove('fichier a lire')


    À savoir, si tu veux relire le fichier pour faire un autre test:
    une fois un fichier lu, le pointeur de ce fichier est positionné à la fin du fichier. Si on essaye de faire relire le fichier sans l'avoir fermé et réouvert, le programme ne lira rien.
    Pour relire un fichier depuis le début, il faut
    - soit faire f.close() puis réouvrir le fichier
    - soit faire f.seek(0)

    seek(x) déplace le pointeur jusqu'à la xième position (x+1 ième caractère du fichier je crois bien)

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 54
    Points : 9
    Points
    9
    Par défaut
    merci eyquem

    ca fonctionne nikel j'ai encore une petite question je voudrais faire un autre filtre mais avec 2 conditions.

    je doit trouver toutes les température inferieure à 18 et supérieur à 27.
    la variable dans le fichier qui fait reférence à la température c'est nvoSpaceTemp.

  6. #6
    Membre éclairé
    Homme Profil pro
    heu...
    Inscrit en
    Octobre 2007
    Messages
    648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : heu...

    Informations forums :
    Inscription : Octobre 2007
    Messages : 648
    Points : 773
    Points
    773
    Par défaut
    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
    fichier=open('TonFichier','r')
    #tout d'abord on récupère un liste de toutes les lignes contenant 'nvoSpaceTemp'
    contenu=[x for x in fichier.read().split('\n') if 'nvoSpaceTemp' in x]
    fichier.close()
    #ensuite on crée deux listes : une avec les températures <18, et une avec les temp > 27
    liste_18=[x for x in contenu if float(x.split('nvoSpaceTemp ')[-1])<18]
    liste_27=[x for x in contenu if float(x.split('nvoSpaceTemp ')[-1])>27]
     
    #on supprime contenu si on s'en servira plus (facultatif)
    del contenu
     
    #ensuite on converti chacune des liste en un texte avant d'écrire ce texte dans un fichier
    liste_18='\n'.join(liste_18)
    fichier=open('Fichier_18','w')
    fichier.write(liste_18)
    fichier.close()
     
    liste_27='\n'.join(liste_27)
    fichier=open('Fichier_27','w')
    fichier.write(liste_27)
    fichier.close()
     
    #de mêm que pour contenu, on supprime liste_18 et liste_27 si on ne s'en set plus par la suite (sauf si c'est la fin du programme)
    del liste_18,liste_27
    En espérant que tu ai compris la façon un peu spéciale employée pour créer les liste...

    Au cas où:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    >>> a=[1,2,3,4,5,6,7,8,9]
    #pour créer une liste avec seulement les éléments de a qui sont paire:
    >>> b=[x for x in a if x%2==0]
    >>> print b
    [2,4,6,8]
     
    #si on avait fait simplement
    >>> b=[x for x in a]
    >>> print b
    [1,2,3,4,5,6,7,8,9]

  7. #7
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Points : 1 658
    Points
    1 658
    Par défaut
    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
    temperatures = [] # on definit une liste, vide au depart
     
    f = open('fichier a lire','r')
    frec = open('fichier receveur','w')
     
    for ln in f:
        if ln[31:54]=='nviOccManCmd OC_STANDBY':
            frec.write(ln)
        if ln[31:43]=='nvoSpaceTemp':
            temp = float(ln[44:])
            if temp>=18 and temp<=27:
                temperatures.append(str(temp))
     
    frec.write('\ntemperatures\n')
    for t in temperatures:
        frec.write(t+'\n')
     
    f.close()
    frec.close()

    Il semble que les 31 premiers caractères soient toujours selon le même schéma et que les caractères suivants soient toujours le nom de la variable (de longueur variable) suivi de sa valeur. Donc j'utilise ln[31:entier] et ln[44:], mais il faut beaucoup se méfier de la possibilité que ce ne soit pas toujours ainsi. Si la forme des lignes n'est pas très rigide, il vaut mieux utiliser count() , find(), partition() et autres méthodes très utiles de string.

    J'ai modifié la condition pour trouver les lignes avec 'STANDBY". Je trouve plus satisfaisant de vérifier que le 'STANDBY' trouvé est bien celui d'une variable nviOccManCmd.

    ln[44:] découpe tous les caractères au delà de la position 44

    float() fait un réel à partir d'un groupe de caractères-chiffres (avec un point décimal éventuel). Les caractères peuvent ètre précédés et suivis de blancs. S'il n'est pas certain que cette condition est respectée, il faut prévoir un controle préalable

    str(temp) refait une chaine de caractères avec le nombre temp, car on ne peut écrire que des caractères dans un fichier.

    Je ne maîtrise pas du tout les bases de données. Il y a certainement mieux que frec.write(t+'\n') pour enregistrer les temperatures.

  8. #8
    Membre averti
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2003
    Messages
    302
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2003
    Messages : 302
    Points : 316
    Points
    316
    Par défaut
    +1 N.tox, sauf que j'aurais mis int à la place de float, juste au cas où on est sur une architecture qui consacre 8 octets aux floats et 4 octets aux int.

    EDIT : ok je viens de m'apercevoir que int("2.3") levait une exception. oups !

  9. #9
    Membre averti
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2003
    Messages
    302
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2003
    Messages : 302
    Points : 316
    Points
    316
    Par défaut
    On aurait pu aussi utiliser une cStringIO au lieu d'une liste pour stocker temporairement les chaînes de caractères à écrire en batch sur le fichier. Ça devrait être encore légèrement plus rapide.

  10. #10
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Points : 1 658
    Points
    1 658
    Par défaut N.tox
    Je pense que read().split('\n') peut avantageusement être remplacé par readlines(), et pendant qu'on y est écrire directement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    liste=open('TonFichier','r').readlines()
    sinon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fichier = open('TonFichier','r')
    est du type 'file' et non 'list'

  11. #11
    Membre éclairé
    Homme Profil pro
    heu...
    Inscrit en
    Octobre 2007
    Messages
    648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : heu...

    Informations forums :
    Inscription : Octobre 2007
    Messages : 648
    Points : 773
    Points
    773
    Par défaut
    Citation Envoyé par eyquem Voir le message
    Je pense que read().split('\n') peut avantageusement être remplacé par readlines(), et pendant qu'on y est écrire directement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    liste=open('TonFichier','r').readlines()
    hummm.... le problème ici avec readlines() c'est que '\n' reste à la fin de chaques éléments, et par la suite, ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #ensuite on crée deux listes : une avec les températures <18, et une avec les temp > 27
    liste_18=[x for x in contenu if float(x.split('nvoSpaceTemp ')[-1])<18]
    liste_27=[x for x in contenu if float(x.split('nvoSpaceTemp ')[-1])>27]
    J'utilise split pour spliter (c'est vrai ?) la ligne analysée et en prendre le dernier élément pour le convertir en float, seulement je trouvais que ça aurait ralongé les choses si y'avait eu un '\n' dans ce dernier élément...
    ...
    Bon, je te l'accorde c'est un peu (carrément) de la feignantise de ma part... j'aurais juste eu à rajouter après [-1], [:-1]...

    En conclusion,

  12. #12
    Membre averti
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2003
    Messages
    302
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2003
    Messages : 302
    Points : 316
    Points
    316
    Par défaut
    Je propose
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     open("FILES/sortie.txt","w").write("\n".join([chaine for chaine in file("FILES/log-automate.txt").xreadlines() if chaine[31:43]=='nvoSpaceTemp' and (float(chaine[44:]) > 27 or float(chaine[44:]) < 18)]))

  13. #13
    Membre averti
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2003
    Messages
    302
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2003
    Messages : 302
    Points : 316
    Points
    316
    Par défaut
    Légérement mieux, je fais une seule conversion en float au lieu de deux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     open("FILES/sortie.txt","w").write("".join([chaine for chaine in file("FILES/log-automate.txt").xreadlines() if chaine[31:43]=='nvoSpaceTemp' and not 18 < float(chaine[44:]) < 27]))
    EDIT : je viens de m'apercevoir qu'il n'est pas obligatoire de rajouter les retours à la ligne puisqu'il sont dans déjà dans ce que retourne xreadlines(), donc je fais un "".join(...) au lieu de "\n".join(...)

  14. #14
    Membre éclairé
    Homme Profil pro
    heu...
    Inscrit en
    Octobre 2007
    Messages
    648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : heu...

    Informations forums :
    Inscription : Octobre 2007
    Messages : 648
    Points : 773
    Points
    773
    Par défaut
    Comme l'a souligné Eyquem, si les tailles des éléments précédents 'nvoSpaceTemp' finissent par varier, ça risque de rencontrer quelque petits problèmes... Si les tailles des éléments précédent sont variables, et que l'on connait la taille min/max de ces dernier alors on peut trouver un compromis avec la vitesse d'exécution en utilisant malgré tout des fonctions plus lourdes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    open("FILES/sortie.txt","w").write("".join([chaine for chaine in file("FILES/log-automate.txt").xreadlines() if 'nvoSpaceTemp' in chaine[min:max] and not 18 < float(chaine[min:].split()[-1]) < 27]))
    Avec min pour la position minimale du premier caractère de l'élément recherché, et max pour la position maximale du dernier caractère de l'élément recherché. Toutefois, si la taille des premiers éléments est invariable, il va sans dire que ce code est inutile

  15. #15
    Membre averti
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2003
    Messages
    302
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2003
    Messages : 302
    Points : 316
    Points
    316
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    open("FILES/sortie.txt","w").write("".join([chaine for chaine in file("FILES/log-automate.txt").xreadlines() if chaine.strip() and chaine.split()[3] == 'nvoSpaceTemp' and not 18 < float(chaine.split()[4]) < 27]))
    Marchera :
    • Même s'il y a des lignes vides;
    • Quelque soit la longueur des chaînes;

  16. #16
    Membre éclairé
    Homme Profil pro
    heu...
    Inscrit en
    Octobre 2007
    Messages
    648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : heu...

    Informations forums :
    Inscription : Octobre 2007
    Messages : 648
    Points : 773
    Points
    773
    Par défaut
    En effet, il n'y a qu'une chose qui m'intrigue, c'est l'utilité de 'if chaine.strip()'
    Et pendant que j'en suis aux questions, je vois que tu préfère utiliser "chaine.split()[3]=='nvoSpaceTemp'" plutôt que "'nvoSpaceTemp' in chaine", j'en déduit que split() -sur un string de cette taille- serait plus rapide qu'un "in", est-ce juste ?

  17. #17
    Membre averti
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2003
    Messages
    302
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2003
    Messages : 302
    Points : 316
    Points
    316
    Par défaut
    Salut,

    Pour la condition if chaine.strip(), elle est nécessaire vu la structure de son fichier de log qui contient des lignes vides.

    Si on supprime cette condition, xreadlines retournera des lignes contenant uniquement un retour à la ligne. donc ['\n'].split()[3] lèvera une exception IndexError, puisque on demande à accéder au 3 élément d'un singleton.

    Par contre, si on utilise ta solution (chaine in ligne), sa simplifie le code puisque plus besoin de tester si la ligne n'est pas vide ! De plus, , "chaine" in ligne est 20% plus rapide que ligne.split()[index] == "chaine". Et enfin, je ne fais plus qu'un seul split au lieu de deux, donc encore quelques micros secondes de gagnées
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
       "".join([chaine for chaine in file("FILES/log-automate.txt").xreadlines() if  'nvoSpaceTemp' in chaine and not 18 < float(chaine.split()[4]) < 27])

  18. #18
    Membre éclairé
    Homme Profil pro
    heu...
    Inscrit en
    Octobre 2007
    Messages
    648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : heu...

    Informations forums :
    Inscription : Octobre 2007
    Messages : 648
    Points : 773
    Points
    773
    Par défaut
    Je connaissait pas l'astuce du if chaine.strip(), je viens de tester pour bien comprendre... excellent pour s'assurer qu'il y a autre chose que des espaces et/ou des '\n' (et/ou des '\t' ?); très pratique, merci

  19. #19
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 54
    Points : 9
    Points
    9
    Par défaut
    Bonjour,

    Merci tout le monde pour toutes ces reponses.

    j'ai encore d'autres questions.

    J'ai un repertoire avec une liste de fichier qui sont toujurs fait de la meme façon.

    TB1519_05032008_0700.txt
    TB1519_05032008_0720.txt
    TB1519_05032008_0740.txt
    TB1519_05032008_0800.txt
    TB1519_05032008_0820.txt

    et ainsi de suite.


    je voudrais ouvrir par exemple le fichier TB1519_05032008_0800.txt

    il faudrait 3 variables dans le programme qui represente le lieu(TB1519) une autre pour la date(05032008) et un autre l'heure(0820).

    Le but est d"effectuer le trie avec le Standby d'un fichier précis.

    voici la deuxieme question.

    je voudrais ouvrir toutes les fichiers du repertoire du meme jour pour utiliser le morceau de programme fait précédament c'est à dire le tri des températures.

    j'ai deja trouver comment liste les fichiers d'un repertoire avec

    import os
    os.listdir("repertoire a lister")



    merci.

  20. #20
    Membre éclairé
    Homme Profil pro
    heu...
    Inscrit en
    Octobre 2007
    Messages
    648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : heu...

    Informations forums :
    Inscription : Octobre 2007
    Messages : 648
    Points : 773
    Points
    773
    Par défaut
    Citation Envoyé par defcom60 Voir le message
    Bonjour,
    Le but est d"effectuer le trie avec le Standby d'un fichier précis.
    merci.
    Que veux-tu dire ?

    Pour ta deuxième question, regardes bien toutes les réponses que l'on t'as donné jusque-là, tous les éléments te permettant d'y arriver sont présent... Allez, grosse indication regardes bien les comprehension lists, elles peuvent agir également comme filtre (compréhension list=[x for x in UneListeUnTupleUneChaine if condition and/or condition ]) fais quelques essais, faits-nous part des problèmes rencontrés, et ce sera avec plaisir (pour moi en tous cas, même si je suppose que c'est pareil pour les autres) que je t'aiderais

Discussions similaires

  1. [Turbo Pascal] Tri d'un fichier texte selon la longueur de chaque ligne
    Par Almoez dans le forum Turbo Pascal
    Réponses: 5
    Dernier message: 19/10/2012, 19h03
  2. tri d'un fichier text
    Par dark_nights dans le forum C++
    Réponses: 9
    Dernier message: 21/01/2009, 18h34
  3. Tri d'un fichier texte, commande sort
    Par fantomas261 dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 16/04/2007, 17h01
  4. tri d'un fichier texte
    Par ben127 dans le forum C
    Réponses: 7
    Dernier message: 23/12/2005, 21h03
  5. Réponses: 4
    Dernier message: 16/12/2005, 18h43

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