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

Langage Perl Discussion :

Recherche de fichier


Sujet :

Langage Perl

  1. #21
    Membre Expert Avatar de MarneusCalgarXP
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    911
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 911
    Par défaut
    Dans ce cas, je te conseille dans un 1° temps de lire le fichier en mode read, tu places tout le contenu dans une chaine de caractère, tu traites le tout avec tes regexp, et à la fin tu ouvres à nouveau le fichier mais en mode écriture, et tu y écris la chaine que tu viens de modifier...

    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
    #!/usr/bin/perl -w
    use strict;
    use File::Find;
     
    finddepth(\&test, qw(D:/test));
     
    sub test {
    	if( $_ eq "blabla.js" ) {
    		&modify("${File::Find::dir}/$_");    
    	}
    }
     
    sub modify($) { 
            my ($file) = @_; 
            my $content = "";
     
    	# read : on lit le fichier, on modifie les lignes, et on stocke en mémoire
    	open (FILE, $file) || die("impossible d'ouvrir le fichier $file"); 
    	while(my $line = <FILE>) {
    		# traitement de la ligne. ex: ici on remplace les "a" par des "z"
    		$line =~ s/a/z/g;
    		# stockage en mémoire
    		$content .= $line; 	
    	}
    	close(FILE);
     
    	# write : on réécrit le fichier intégralement !
    	open (FILE, ">$file") || die("impossible d'ouvrir le fichier $file en écriture"); 
    	print FILE $content;
    	close(FILE);
    }

  2. #22
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 161
    Par défaut
    ouah super !

    Comme j'aimerai essayer un peu par moi même tout en m'aidant de vos script, je propose ceci mais je ne suis pas sur que ca marche.

    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
     
     
    #!/usr/bin/perl -w
     
    use strict;
    use File::Find;
     
    finddepth(\&test, ".", "C:/");
     
    sub test {
      if( $_ eq "blabla.js" ) {
     
        open (FILE, "${File::Find::dir}/$_");
        while(<FILE>) {
     
        @test = $_;
     
        foreach $test (@test) {
        $test =~ s/a/z/g;
    }
    }
     
      }
      elsif( m/\.js \z/x ){
     
      }
    }

  3. #23
    Membre Expert Avatar de MarneusCalgarXP
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    911
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 911
    Par défaut
    Tu as oublié une accolade fermante je pense, il devrait y en avoir une juste après :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    while(<FILE>) {
     
        @test = $_;
    Dans le même bloc de code, si tu veux stocker tout ça dans un tableau, il faut utiliser des push


    Ensuite, tu modifies le contenu en mémoire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     foreach $test (@test) {
        $test =~ s/a/z/g;
    }
    mais tu n'en fais rien, tu ne le restockes même pas dans le tableau ! Il est déconseillé d'utiliser le même nom de variable pour ton tableau et pour ta chaine de caractère, sinon comment perl va-t-il interpréter l'expression $test[3] ?

    Tu as juste à reprendre mon code, et à modifier la regexp, il fait exactement ce dont tu as besoin !

  4. #24
    Expert confirmé
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Par défaut
    Mettre l'ensemble du fichier en mémoire en le lisant ligne par ligne puis ensuite le traiter ligne à ligne n'est pas une très bonne politique... C'est extrèmement innefficient du point de vue spatial, et mauvais également du point de vue temporel.
    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
     
    #!/usr/bin/perl -w
     
    use strict;
    use File::Find;
     
    finddepth(\&test, ".", "C:/");
     
    sub test {
     
      if( $_ eq "blabla.js" ) {
     
        # on doit toujours tester le résultat d'un open(), de plus l'emploi
        # d'un handle lexical et de la forme à 3 arguments de open sont
        # très recommandé pour éviter les surprises.
        # Eviter à tout prix les ${une chaîne de caractère} s'ils ne sont 
        # pas indispensable.
        open my $blabla_file, '<', $File::Find::name
          or die "Can't read $File::Find::name : $!\n";
     
        while(my $line = <$blabla_file>) {
          $line =~ s/a/z/g;
          # faire quelque chose avec $line ??
        }
     
        close $blabla_file;
      } 
      # pourquoi laisser le elsif s'il ne sert à rien ?
     
    }
    Si tu veux réécrire sur le fichier originel la pratique la plus efficace et la plus sûre est d'employer un fichier temporaire :
    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
     
    #!/usr/bin/perl -w
     
    use strict;
    use File::Find;
    use File::Temp qw(tempfile);
     
    finddepth(\&test, ".", "C:/");
     
    sub test {
     
      if( $_ eq "blabla.js" ) {
     
        open my $blabla_file, '<', $File::Find::name
          or die "Can't read $File::Find::name : $!\n";
     
        my ($tmp, $tmpname) = tempfile();
        # les fichiers temporaires sont normalement ouvert en mode binaire, 
        # dans notre cas nous le voulons plutôt en mode texte
        binmode( $tmp, ':crlf' );
     
        while(my $line = <$blabla_file>) {
          $line =~ s/a/z/g;
          print $tmp $line;
        }
     
        close $blabla_file;
        close $tmp;
     
        unlink( $File::Find::name )
          or die "Can't remove the old file : $!\n";
        rename( $tmpname, $File::Find::name )
          or die "Can't rename the temp file $tmpname : $!\n";
      }
     
    }
    --
    Jedaï

  5. #25
    Membre Expert Avatar de MarneusCalgarXP
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    911
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 911
    Par défaut
    Mettre l'ensemble du fichier en mémoire en le lisant ligne par ligne puis ensuite le traiter ligne à ligne n'est pas une très bonne politique... C'est extrèmement innefficient du point de vue spatial, et mauvais également du point de vue temporel.
    Oui, effectivement, lire tout, puis traiter tout est inefficace, il faut traiter la ligne dès qu'elle est lue ! (cf mon code quelques posts plus haut )

  6. #26
    Expert confirmé
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Par défaut
    Citation Envoyé par MarneusCalgarXP
    Oui, effectivement, lire tout, puis traiter tout est inefficace, il faut traiter la ligne dès qu'elle est lue ! (cf mon code quelques posts plus haut )
    Sauf que dans ton code tu stocke tout de même l'intégralité du fichier en mémoire, pour écrire tout d'un coup dans l'ancien fichier, alors qu'en utilisant un fichier temporaire, tu peux éviter ce problème.

    --
    Jedaï

  7. #27
    Expert confirmé
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Par défaut
    Citation Envoyé par Jedai
    Si tu veux réécrire sur le fichier originel la pratique la plus efficace et la plus sûre est d'employer un fichier temporaire :
    Ceci est en fait faux dans le cas particulier de ta regex... Car elle a la particularité de ne pas changer la longueur de la ligne, dans ce cas et dans celui-là uniquement, tu peux ouvrir le fichier en lecture-écriture et avec des seek et des tell modifier directement le fichier en-place. Mais cela en vaut-il vraiment la peine ? J'en doute vu que la complexité du code augmente beaucoup, et que le moindre changement risque de briser le code.

    --
    Jedaï

  8. #28
    Membre Expert Avatar de MarneusCalgarXP
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    911
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 911
    Par défaut
    Citation Envoyé par Jedai
    Sauf que dans ton code tu stocke tout de même l'intégralité du fichier en mémoire, pour écrire tout d'un coup dans l'ancien fichier, alors qu'en utilisant un fichier temporaire, tu peux éviter ce problème.
    Wé, enfin bon, créer un fichier temporaire, c'est toujours utiliser une mémoire secondaire. Dans le cas d'un JavaScript dont la taille ne dépassera quelques ko, voir dans le pire des cas le Mo, quel intéret à perdre du temps sur les accès disque (un HDD sera toujours plus lent d'accès qu'un stockage en RAM), sur la génération d'un nom temporaire de fichier, sur la création, la copie et la suppression d'un fichier ?

    Sans compter que pour écrire au fil de l'eau dans le fichier temporaire, ca cause beaucoup d'accès disque, très pénalisants ! Même Perl met en place un buffer d'une certaine taille pour l'écriture dans les flux pour éviter de trop pénaliser les IO, en gros écrire dans un fichier temporaire dans ce cas précis (fichier de petite taille) c'est juste une perte de temps, dans le sens ou le contenu du fichier risque d'être inférieur en taille à la taille du buffer de perl, ca reviendra au fait ou on aura le fichier stocké intégralement en mémoire dans le buffer d'écriture, avant qu'il ne soit écrit dans le fichier temporaire, et qu'on ne recopie son contenue dans le fichier d'origine. en gros, ça cumulerait les inconvénients des 2 méthodes

  9. #29
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 161
    Par défaut
    Merci all

    J'ai encore un petit problème mais je pense qu'il faudrai que j'utilise une expreg

    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
    #!/usr/bin/perl -w
     
    use strict;
    use File::Find;
    use File::Temp qw(tempfile);
     
    finddepth(\&test, ".", "C:/");
     
    sub test {
     
      if( $_ eq "blabla.js" ) {
     
        open my $blabla_file, '<', $File::Find::name or die "Peut pas lire $File::Find::name : $!\n";
        my ($tmp, $tmpname) = tempfile();
        binmode($tmp, ':crlf');
        while (my $line = <$blabla_file>) {
     
          print $tmp $line;
          if $tmp eq ("\"user_pref(\"network.proxy.http\", \"192.10.93.100\");\"") {
     
            $tmp = "\"user_pref(\"network.proxy.http\", \"192.10.93.101\");\"";
        }
    }
     
        close $blabla_file;
        close $tmp;
     
        unlink($File::Find::name) or die "Peut pas enlever l'ancien fichier : $!\n";
        rename($tmpname, $File::Find::name) or die "Peut pas renomer $tmpname : $!\n";
      }
     
    }
    Il ne veut pas me modifier le $tmp

    j'ai cette erreur :
    syntax error at C:\Documents and Settings\Administrateur\Bureau\perl\test
    .pl line 19, near "if $tmp "
    syntax error at C:\Documents and Settings\Administrateur\Bureau\perl\test
    .pl line 32, near "}"
    Execution of C:\Documents and Settings\Administrateur\Bureau\perl\test.pl
    aborted due to compilation errors.
    Thx

  10. #30
    Expert confirmé
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Par défaut
    Bien sûr, dans ce cas particulier il est possible que la méthode du fichier temporaire soit légèrement plus lente, mais elle assure que quelque soit la taille du fichier il n'y aura aucun problème, et n'est pas plus longue à écrire. Tu y gagnes énormément en sécurité : imagines que le .js soit un fichier généré automatiquement et que le générateur ait déraillé et ne se soit arrêté que quand il ne pouvait plus écrire sur le fichier (par exemple lorsque celui-ci a atteint la taille de 4 Go...)...
    Du point de vue de la performance, sauf sur les plus petits des fichiers la méthode du fichier temporaire sera gagnante : dans ta méthode Perl crée aussi un buffer donc aucun gain de ce côté là (comme j'utilise print et que je ne flushe pas la sortie est bufferisée, ce qui fait qu'il n'y a pas de pénalité à faire plusieurs petites sorties au lieu d'une seule grande), mais il doit également allouer une string (ce qui est plus couteux qu'allouer un buffer, question de surcharge dû à la gestion des variables en Perl) et surtout l'agrandir successivement autant de fois qu'il y a de lignes dans le fichier, peut-être la recopier entièrement à un autre emplacement plusieurs fois... (puisque tu ne préalloue pas d'espace pour ta string). Donc le processus d'écriture est plus rapide avec la méthode du fichier temporaire (et la différence augmente avec la taille du fichier), la surcharge de mon côté est plutôt dûe à la création d'un fichier temporaire, la suppression du fichier original et le renommage, mais cette surcharge est une constante et donc devient négligeable par rapport au gain dès que le fichier est relativement gros.

    La méthode du fichier temporaire est donc plus sûre, et plus rapide dans la plupart des cas, c'est pourquoi elle a ma préférence.

    Mais TIMTOWTDI après tout.

    --
    Jedaï

  11. #31
    Expert confirmé
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Par défaut
    Il y a une erreur de syntaxe dans ton code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if $tmp eq ("\"user_pref(\"network.proxy.http\", \"192.10.93.100\");\"")
    La condition d'un if préfixe doit être entourée de parenthèses, de plus je pense que tu as confondu $tmp (le fichier temporaire) et $line (la ligne qu'on vient de lire dans le fichier original et qu'on veut réécrire modifiée dans $tmp) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if ( $line eq "\"user_pref(\"network.proxy.http\", \"192.10.93.100\");\"\n" ) {
            $line = "\"user_pref(\"network.proxy.http\", \"192.10.93.101\");\"\n";
    }
    Tu remarqueras que j'ai rajouté un "\n" à la fin de la ligne.
    Tu peux aussi faire ça plus facilement et plus prudemment (avec la méthode ci-dessus il suffit qu'il y ait un espace en trop et la méthode échoue...) avec une regex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $line =~ s/("user_pref \s* \( \s* "network.proxy.http" \s* , \s* )"192.10.93.100"/$1"192.10.93.101"/x;
    Par ailleurs l'ordre des opérations n'est pas correct dans ton code : en effet tu écris la ligne avant de la modifier, donc ton résultat sera identique au fichier original...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    while (my $line = <$blabla_file>) {
        $line =~ s/("user_pref \s* \( \s* "network.proxy.http" \s* , \s* )"192.10.93.100"/$1"192.10.93.101"/x;
        print $tmp $line;
    }
    --
    Jedaï

  12. #32
    Membre Expert Avatar de MarneusCalgarXP
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    911
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 911
    Par défaut
    Citation Envoyé par Jedai
    La méthode du fichier temporaire est donc plus sûre, et plus rapide dans la plupart des cas, c'est pourquoi elle a ma préférence.
    Ok

    Citation Envoyé par Jedai
    Mais TIMTOWTDI après tout.
    Ca c'est sur, c'est même la philosophie de Perl je dirais

  13. #33
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 161
    Par défaut
    Y a pas a dire vous assurez !!!
    Faut que j'atteigne votre niveau en perl la parce que je suis à la bourre

    N'oublions pas que : " Le perl Est Merveilleux " !!!

    En tout cas c'est vraiment enrichissant de voir vos idées ca permet de m'apprendre enormément !

    Merci bcp pour ca !

    ++ Nickname ++

  14. #34
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 161
    Par défaut
    excusez moi de vous déranger à nouveau

    cette expression régulière n'a pas l'air de fonctionner pourtant je vois pas ou cela bloque.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $line =~ s/("user_pref\("network.proxy.http",) "192.10.93.100"/$1 "192.10.93.101"/x;
    je cherche à remplacer dans un premier temps :

    user_pref("network.proxy.http", "192.10.93.100");

    mais il ne veut pas snif (j'ai essayer avec ton expreg Jedai mais cela ne passe pas)

    Merci encore

  15. #35
    Membre Expert Avatar de MarneusCalgarXP
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    911
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 911
    Par défaut
    Il me semble qu'il faut également précéder les double quotes ainsi que les points d'un antislash...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    use strict;
    use warnings;
     
    my $line = q(user_pref("network.proxy.http", "192.10.93.100"));
    $line =~ s/(user_pref\(\"network\.proxy\.http\",) \"192\.10\.93\.100\"/$1 "192.10.93.101"/;
    print($line);

  16. #36
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 161
    Par défaut
    toujours pas snif :'(

    je post le code entier :

    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
    #!/usr/bin/perl -w
    use strict;
    use File::Find;
    use File::Temp qw(tempfile);
    finddepth(\&test, ".", "C:/");
     
    sub test {
     
      if( $_ eq "blabla.js" ) {
     
        open my $blabla_file, '<', $File::Find::name or die "Peut pas lire $File::Find::name : $!\n";
        my ($tmp, $tmpname) = tempfile();
        binmode($tmp, ':crlf');
        while (my $line = <$blabla_file>) {
        #$line =~ s/("user_pref\("network.proxy.http",) "192.10.93.100"/$1 "192.10.93.101"/x;
        $line =~ s/("user_pref\(\"network\.proxy\.http\",) \"192\.10\.93\.100\"/$1 "192\.10\.93\.101"/x;
        print $tmp $line;
     
    }
        close $blabla_file;
        close $tmp;
     
        unlink($File::Find::name) or die "Peut pas enlever l'ancien fichier : $!\n";
        rename($tmpname, $File::Find::name) or die "Peut pas renomer $tmpname : $!\n";
      }
     
    }
    J'ai esayer avec \ et sans mais le fichier blabla.js reste inchanger.

    Celui-ci contient cette ligne :

    user_pref("network.proxy.http", "192.10.93.100");

    Bizard

    Edit : non c'est bon excuse moi ca marche impec

    Merci monsieur =)

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. [Système][fichier] recherche de fichier dans tout le disque dur
    Par helonear dans le forum Entrée/Sortie
    Réponses: 11
    Dernier message: 15/12/2010, 10h43
  2. Recherche dans fichiers
    Par Tchinkatchuk dans le forum Linux
    Réponses: 2
    Dernier message: 17/06/2005, 10h32
  3. Réponses: 14
    Dernier message: 25/10/2004, 21h33
  4. batch de recherche de fichier ...
    Par Félia dans le forum Scripts/Batch
    Réponses: 5
    Dernier message: 29/07/2004, 15h54
  5. Recherche support fichier
    Par sydiop dans le forum Informix
    Réponses: 5
    Dernier message: 18/03/2004, 10h15

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