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

C Discussion :

Nombre de lignes dans un fichier


Sujet :

C

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 163
    Points : 115
    Points
    115
    Par défaut Nombre de lignes dans un fichier
    Je voudrais savoir si vous connaissiez une petite méthode pour connaitre le nombre de ligne dans un fichier texte, meme avec une commande systeme
    Vive le C => Quoique pas sympa pour la mémoire de mon PC.

    Seul le chat le savait!!!!

    De la rigueur en programmation est maître mot!!!

  2. #2
    Membre habitué Avatar de larnicebafteur
    Inscrit en
    Mai 2006
    Messages
    133
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 133
    Points : 131
    Points
    131
    Par défaut
    Il existe bien des commandes systèmes, mais ca dépénd du système !
    S'il n'y a pas de solution, c'est qu'il n'y a pas de problème

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 163
    Points : 115
    Points
    115
    Par défaut
    Il doit pouvoir fonctionner sous Window et Unix.
    Etre tres rapide.
    Vive le C => Quoique pas sympa pour la mémoire de mon PC.

    Seul le chat le savait!!!!

    De la rigueur en programmation est maître mot!!!

  4. #4
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par theshark85
    Il doit pouvoir fonctionner sous Window et Unix.
    Etre tres rapide.
    Utiliser fgets alors... Ou alors, utiliser des #ifdef pour savoir sous quel OS tu te trouves et utiliser wc sous unix par exemple...

    Jc

  5. #5
    Membre éclairé Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Points : 858
    Points
    858
    Par défaut
    Sous unix :Sous windows, je ne sais pas. En installant cygwin, tu as la même commande que ci-dessus.
    Software Failure. Press left mouse button to continue.
    Guru Meditation #0100000C.000FE800

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 163
    Points : 115
    Points
    115
    Par défaut
    Ceci doit etre portable, donc pas de possibilité d'installer des biblio ou autres.
    Avec fgets entre 2 et 3 minutes pour 11 100 000 lignes. Qui dit mieux!!!
    Vive le C => Quoique pas sympa pour la mémoire de mon PC.

    Seul le chat le savait!!!!

    De la rigueur en programmation est maître mot!!!

  7. #7
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Voici une fonction que j'ai y'a un ptit moment maintenant, je pense qu'elle peut être optimisé, a voir !

    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
    int c_file_nb_lines (char const * const s_filename)
    {
       FILE *   p_file   = NULL;
       char *   s_line   = NULL;
       int      nb_lines = 0;
     
     
       /* ----- Ouverture du fichier ----- */
     
       p_file = fopen (s_filename, "r");
     
       if (!p_file)
       {
          /* Erreur: impossible d'ouvrir le fichier. */
          return -1;
       }
     
       /* ----- */
     
     
       /* ----- Allocation d'un tableau pour contenir la ligne ----- */
     
       s_line = malloc (MAX_LENGHT);
     
       if (!s_line)
       {
          /* Erreur: impossible d'allouer l'espace requis. */
          fclose (p_file);
          return -1;
       }
     
       /* ----- */
     
     
       /* ----- Lecture de la ligne du fichier ----- */
     
       while (fgets (s_line, MAX_LENGHT, p_file))
       {
          memset (s_line, 0, sizeof (s_line));
          nb_lines++;
       }
     
     
       if (ferror (p_file))
       {
          /* Erreur pendant la lecture du fichier. */
          return -1;
       }
     
       /* ----- */
     
     
       /* ----- Fermeture du fichier ----- */
     
       fclose (p_file);
     
       /* ----- */
     
     
       return nb_lines;
    }
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 163
    Points : 115
    Points
    115
    Par défaut
    Merci pour vos réponses, j'ai garde la méthode gets, car du coup je fai un autre truc en meme temps.
    Vive le C => Quoique pas sympa pour la mémoire de mon PC.

    Seul le chat le savait!!!!

    De la rigueur en programmation est maître mot!!!

  9. #9
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Il manque free(s_line);

    D'ailleurs pourquoi une alloc dynamique pour une taille dependante d'un #define (je suppose).
    Introduction à Silverlight 4 (new) ; Localisation d'une application Silverlight (new) ;
    Mon espace perso[/B]

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. Albert Einstein[/SIZE]

  10. #10
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Citation Envoyé par Skyrunner
    Il manque free(s_line);

    D'ailleurs pourquoi une alloc dynamique pour une taille dependante d'un #define (je suppose).
    Hum oui c'est juste, c'est super rare que j'oublie un free, fallais que ca tombe sur cette fonction ! Oui tu suppose bien, m'enfin je me rappel même plus quand j'ai fait cette fonction !

    Vais changer ca
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  11. #11
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Bon si jamais ca interesse encore theshark85

    code modifié:
    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
    int c_file_nb_lines (char const * const s_filename)
    {
       FILE *   p_file   = NULL;
       char     s_line     [MAX_LENGHT];
       int      nb_lines = 0;
     
     
       /* ----- Ouverture du fichier ----- */
     
       p_file = fopen (s_filename, "r");
     
       if (!p_file)
       {
          /* Erreur: impossible d'ouvrir le fichier. */
          return -1;
       }
     
       /* ----- */
     
     
       /* ----- Lecture de la ligne du fichier ----- */
     
       while (fgets (s_line, MAX_LENGHT, p_file))
       {
          nb_lines++;
       }
     
     
       if (ferror (p_file))
       {
          /* Erreur pendant la lecture du fichier. */
          fclose (p_file);
          return -1;
       }
     
       /* ----- */
     
     
       /* ----- Fermeture du fichier ----- */
     
       fclose (p_file);
     
       /* ----- */
     
     
       return nb_lines;
    }
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  12. #12
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par theshark85
    Ceci doit etre portable, donc pas de possibilité d'installer des biblio ou autres.
    Avec fgets entre 2 et 3 minutes pour 11 100 000 lignes. Qui dit mieux!!!
    Aller un challenge...

    Voici comment j'ai créé le fichier test:
    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
     
    #include <stdio.h>
    #include <time.h>
     
    int main(int argc, char **argv)
    {
            int size,i;
            int cnt=0;
     
            srand(time(NULL));
     
            if(argc!=2)
            {
            printf("Error dans la ligne de commande\n");
            return 1;
            }
     
            printf("Creating file size\n");
            size= strtol(argv[1],NULL,0);
     
            printf("Creating file size: %d\n",size);
            FILE *f = fopen("filetotest","w");
     
            if(f==NULL)
            {
            printf("Error\n");
            return 1;
            }
     
            for(i=0;i<size;i++)
            {
                    if(rand()%500>350)
                            {cnt++;fprintf(f,"\n");}
                    else
                            fprintf(f,"_");
            }
     
            printf("Created %d lines\n",cnt);
            fclose(f);
    }
    En créant un fichier de 50 meg, j'ai:

    ~/tmp$ ./createf 50000000
    Creating file size
    Creating file size: 50000000
    Created 14894826 lines
    En utilisant ce programme:

    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
    #include <stdlib.h>
    #include <stdio.h>
     
    #define N 4096
     
    int main(int argc, char **argv)
    {
            char buf[N];
            int i,size;
            int cnt=0;
     
            if(argc!=2)
                    return 1;
     
            FILE *f = fopen(argv[1],"r");
     
            if(f==NULL)
                    return 1;
     
            while((size=fread(buf,1,N,f))>0)
                    {
                    for(i=0;i<size;i++)
                            {
                            if(buf[i]=='\n')
                                    cnt++;
                            }
                    }
            fclose(f);
            printf("Lignes: %d\n",cnt);
            return 0;
    }
    J'obtiens:

    ~/tmp$ time ./a.out filetotest
    Lignes: 14894826

    real 0m0.152s
    user 0m0.120s
    sys 0m0.027s
    Donc, je dis mieux...

    Jc

  13. #13
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par CSoldier
    Voici une fonction que j'ai y'a un ptit moment maintenant, je pense qu'elle peut être optimisé, a voir !
    Ta fonction a un problème...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        while (fgets (s_line, MAX_LENGHT, p_file))
        {
           memset (s_line, 0, sizeof (s_line));
           nb_lines++;
        }
    Tu ne connais pas la taille maximale de la ligne. Tu supposes que c'est MAX_LENGTH mais ce n'est pas forcément si "petit"...

    Il faudrait tester si le dernier caractère de ta chaîne s_line est bien un '\n' avant d'incrémenter...

    Ensuite, je ne vois pas l'intérêt du memset... A la prochaine lecture, le début de la chaîne sera écrasé et il y aura un '\0' pour ne pas déborder sur les anciennes valeurs...

    Jc

  14. #14
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 851
    Points : 3 481
    Points
    3 481
    Par défaut
    Salut,

    Il faudrait qu'il essaie sur la même machine pour voir quel code est plus rapide !

    Il serait encore plus rapide d'avoir une ligne d'enregistrement de longueur fixe, et de faire un simple calcul sur la taille du fichier; je dis ça, car apparement tu es soucieux de la rapidité, et ça peut être une optimisation interessante pour ton programme

    A+
    K

  15. #15
    Membre éclairé Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Points : 858
    Points
    858
    Par défaut
    Est-ce que vous croyez que ça vaut vraiment le coup d'optimiser ce genre de routine, sachant qu'on est limité par le temps d'accès du média ?
    Software Failure. Press left mouse button to continue.
    Guru Meditation #0100000C.000FE800

  16. #16
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par KiLVaiDeN
    Salut,

    Il faudrait qu'il essaie sur la même machine pour voir quel code est plus rapide !
    La version de CSoldier utilisant fgets:

    time ./a.out filetotest
    Lignes: 14894827

    real 0m2.440s
    user 0m2.359s
    sys 0m0.024s
    Est-ce que vous croyez que ça vaut vraiment le coup d'optimiser ce genre de routine, sachant qu'on est limité par le temps d'accès du média ?
    Dépendant de l'importance qu'a le facteur temps et le nombre de fois où il faudra appeler la fonction avoir le choix entre .2 seconde et 2.4 secondes, je sais ce que je préfère...

    En plus, il faudrait rajouter un strlen pour être vraiment sûr du nombre de lignes dans la version de CSoldier...

    Mais dans la réalité, les deux méthodes sont bonnes et acceptables, je faisais simplement remarquer qu'il y avait plus rapide en réponse à la phrase:
    Avec fgets entre 2 et 3 minutes pour 11 100 000 lignes. Qui dit mieux!!!

    Jc

  17. #17
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Hum ouaipe effectivement, moi je cherche jamais directement à optimiser étant donné qu'on n'est pas spécialement a 1 ou 2 secondes prés et que cela dépend aussi du media mais c'est une bonne chose que de tester différentes versions
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  18. #18
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 851
    Points : 3 481
    Points
    3 481
    Par défaut
    En général, je pense qu'il est toujours interessant d'optimiser un traitement quand ce dernier est destiné à être souvent appellé. Car un petit cycle de CPU économisé, lors d'un milllion d'itérations, ça commence à faire beaucoup de petits cycles

    Après, si il ne s'agit que d'un traitement ponctuel, l'optimisation est secondaire selon moi et il vaut mieux se concentrer sur la gestion de la mémoire, enfin c'est ce que j'en dis, les experts ont peut-être un avis différent sur la question !

    En l'occurence, le temps de réponse du média est grandement supérieur à l'économie faite lors d'une quelconque optimisation; donc l'optimisation devient négligeable je dirais, comme tu fais bien de le souligner !
    K

  19. #19
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par theshark85
    Ceci doit etre portable, donc pas de possibilité d'installer des biblio ou autres.
    Avec fgets entre 2 et 3 minutes pour 11 100 000 lignes. Qui dit mieux!!!
    On a bien dit compter les lignes ? Pourquoi les charger ? Il suffit de compter les délimiteurs...
    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
     
    #include<stdio.h>
     
    #define fname "fichier.txt"
     
    int main()
    {
       FILE *fp = fopen(fname, "r");
     
       if (fp != NULL)
       {
          unsigned long count = 0;
          int c;
          while ((c = fgetc(fp)) != EOF)
          {
             if (c == '\n')
             {
                count++;
             }
          }
          fclose(fp);
          printf("%lu lines\n", count);
       }
       else
       {
          perror(fname);
       }
       return 0;
    }
    Pas de Wi-Fi à la maison : CPL

  20. #20
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Je suis d'accord que ce n'est pas la peine de les charger mais :

    Vu que je me suis mis en position d'arbitre entre les versions:

    time ./compteemmanuel
    14894826 lines

    real 0m0.950s
    user 0m0.908s
    sys 0m0.035s
    Donc pour le moment tu es plus lent Emmanuel. Peut-être parce que je lis en bloc de 4096 caractères? Mais je pense plutôt que c'est parce que tu va faire 4096 fois plus d'appels que moi.... Ca ça détruit la vitesse de ton code...

    En utilisation mémoire par contre, tu gagnes...

    Still champion,
    Jc

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

Discussions similaires

  1. Calcul du nombre de lignes dans un fichier texte en JavaScript
    Par developppez dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 29/08/2017, 08h13
  2. nombre de lignes dans un fichier .txt
    Par marieo dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 31/10/2007, 15h22
  3. Compter le nombre de ligne dans un fichier
    Par amine_en_france dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 31/05/2007, 17h19
  4. [Fichier] Nombre de ligne dans un fichier texte
    Par NewSer dans le forum Entrée/Sortie
    Réponses: 7
    Dernier message: 10/11/2004, 16h58
  5. Réponses: 2
    Dernier message: 02/03/2004, 19h38

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