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

MFC Discussion :

lecture d'un fichier


Sujet :

MFC

  1. #1
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 35
    Par défaut lecture d'un fichier
    Est-ce que quelqu'un pourrait me dire comment faire pour lire un fichier format csv de la forme :
    3.0255;-6.014;8.4563;-15.2369;4.02987
    5.256;5.1039;-4.9874;-6.01247;5.032

    En gros je voudrais récupérer ces valeurs (à savoir qu'il y a 9 colonnes séparé par des points virgule et un nombre important de ligne (environ 200 ou 300)) pour les afficher dans une ListCtrl de ma boite de dialogue.
    Le nombre de ligne ne pose pas problème. Pour le moment je n'arrive à lire que les deux premières colonnes.

    En attendant vos réponses.
    Merci

    N.B : je suis un novice en c++

  2. #2
    Membre éprouvé
    Avatar de TheGzD
    Homme Profil pro
    Ingénieur/ Docteur en Informatique
    Inscrit en
    Avril 2007
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur/ Docteur en Informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 327
    Par défaut
    http://msdn.microsoft.com/en-us/library/k4ftfkd2.aspx
    pour découper une ligne après l'avoir stockée dans un CString

  3. #3
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 35
    Par défaut
    Et bien en fait si tu veut j'ai déjà un bout de code, mais je ne comprends pas pourquoi je ne récupére que les 2 premières colonnes de mon fichier.
    Pour info le code :
    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
     
    	bool b_result = true;
    	char format[9];
    	CString str,str_tmp;
    	char delim = ';';
     
    	double freq,imped1,adapt1;
    	double imped2,adapt2;
    	double imped3,adapt3;
    	double imped4,adapt4;
     
    	m_list_carac_boite_antenne.DeleteAllItems();
     
    	CWinApp * theApp = AfxGetApp();
    	if(theApp)
    	{
      		str_tmp = theApp->GetProfileString("CSV_DELIMITERS","DELIM",";");
    		delim = str_tmp.GetAt(0);
    	}
     
    	sprintf(format,"%s%c%s","%lf",delim,"%lf");
    	CStdioFile file;
    	if(!file.Open((LPCTSTR)strFileBA,CFile::modeRead))
    	{
    		AfxMessageBox("impossible d'ouvrir le fichier "+strFileBA);
    		return false;
    	}
    	else
    	{
    		while(file.ReadString(str))
    		{  		
    			if (sscanf((LPCTSTR)str,format,&freq,&imped1,&adapt1,&imped2,&adapt2,&imped3,&adapt3,&imped4,&adapt4) == 2 )
    			{
    				str_tmp.Format("%1.lf",freq);
    				m_list_carac_boite_antenne.InsertItem(m_list_carac_boite_antenne.GetItemCount(),str_tmp);
    				str_tmp.Format("%1.4lf",imped1);
    				m_list_carac_boite_antenne.SetItemText(m_list_carac_boite_antenne.GetItemCount() - 1,1,str_tmp);
    				str_tmp.Format("%1.3lf",adapt1);
    				m_list_carac_boite_antenne.SetItemText(m_list_carac_boite_antenne.GetItemCount() - 1,2,str_tmp);
    				str_tmp.Format("%1.4lf",imped2);
    				m_list_carac_boite_antenne.SetItemText(m_list_carac_boite_antenne.GetItemCount() - 1,3,str_tmp);
    				str_tmp.Format("%1.3lf",adapt2);
    				m_list_carac_boite_antenne.SetItemText(m_list_carac_boite_antenne.GetItemCount() - 1,4,str_tmp);
    				str_tmp.Format("%1.4lf",imped3);
    				m_list_carac_boite_antenne.SetItemText(m_list_carac_boite_antenne.GetItemCount() - 1,5,str_tmp);
    				str_tmp.Format("%1.3lf",adapt3);
    				m_list_carac_boite_antenne.SetItemText(m_list_carac_boite_antenne.GetItemCount() - 1,6,str_tmp);
    				str_tmp.Format("%1.4lf",imped4);
    				m_list_carac_boite_antenne.SetItemText(m_list_carac_boite_antenne.GetItemCount() - 1,7,str_tmp);
    				str_tmp.Format("%1.3lf",adapt4);
    				m_list_carac_boite_antenne.SetItemText(m_list_carac_boite_antenne.GetItemCount() - 1,8,str_tmp);
    			}
    		}
    		file.Close();
    	}
    		return b_result
    Voilà si jamais quelqu'un a peut me dire d'où vient mon problème.
    Merci

  4. #4
    Membre éprouvé
    Avatar de TheGzD
    Homme Profil pro
    Ingénieur/ Docteur en Informatique
    Inscrit en
    Avril 2007
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur/ Docteur en Informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 327
    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
    if (sscanf((LPCTSTR)str,format,&freq,&imped1,&adapt1,&imped2,&adapt2,&imped3,&adapt3,&imped4,&adapt4) == 2 )
                {
                    str_tmp.Format("%1.lf",freq);
                    m_list_carac_boite_antenne.InsertItem(m_list_carac_boite_antenne.GetItemCount(),str_tmp);
                    str_tmp.Format("%1.4lf",imped1);
                    m_list_carac_boite_antenne.SetItemText(m_list_carac_boite_antenne.GetItemCount() - 1,1,str_tmp);
                    str_tmp.Format("%1.3lf",adapt1);
                    m_list_carac_boite_antenne.SetItemText(m_list_carac_boite_antenne.GetItemCount() - 1,2,str_tmp);
                    str_tmp.Format("%1.4lf",imped2);
                    m_list_carac_boite_antenne.SetItemText(m_list_carac_boite_antenne.GetItemCount() - 1,3,str_tmp);
                    str_tmp.Format("%1.3lf",adapt2);
                    m_list_carac_boite_antenne.SetItemText(m_list_carac_boite_antenne.GetItemCount() - 1,4,str_tmp);
                    str_tmp.Format("%1.4lf",imped3);
                    m_list_carac_boite_antenne.SetItemText(m_list_carac_boite_antenne.GetItemCount() - 1,5,str_tmp);
                    str_tmp.Format("%1.3lf",adapt3);
                    m_list_carac_boite_antenne.SetItemText(m_list_carac_boite_antenne.GetItemCount() - 1,6,str_tmp);
                    str_tmp.Format("%1.4lf",imped4);
                    m_list_carac_boite_antenne.SetItemText(m_list_carac_boite_antenne.GetItemCount() - 1,7,str_tmp);
                    str_tmp.Format("%1.3lf",adapt4);
                    m_list_carac_boite_antenne.SetItemText(m_list_carac_boite_antenne.GetItemCount() - 1,8,str_tmp);
                }
    je ne peux que t'inviter à remplacer cette horreur par quelques Tokenize (exemple en bas du lien que je t'ai mis plus haut)

    EDIT : après vérification de ce que tu as fait je réitérer encore => oublie tes printf et scanf (surtout que ta variable format ne semble pas permettre la découpage en 9 variables). La solution que tu essayes de mettre en place est compliquée, peu maintenable et surtout source d'erreur. Quand on programme en C++ on essaye d'en tirer profit et de ne pas faire tout en C

  5. #5
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 35
    Par défaut
    OK bon je vais essayer avec tokenize on verra le resultat!
    Merci pour ton aide en espérant que ce soit la bonne solution

  6. #6
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 35
    Par défaut
    Bon comme je t'ais dit, j'ai opté pour la solution tokenize, seulement comme je ne connaissais pas cette fonction j'ai un peu du mal à comprendre comment l'integrer dans mon programme.L'exemple n'est pas très explicite (enfin pour moi) et comme j'ai dit je suis un débutant en c++, alors si tu as (ou quelqu'un d'autres) des infos pour m'aider un peu, cette aide serait la bienvenue.
    Merci

  7. #7
    Membre éprouvé
    Avatar de TheGzD
    Homme Profil pro
    Ingénieur/ Docteur en Informatique
    Inscrit en
    Avril 2007
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur/ Docteur en Informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 327
    Par défaut
    Tu récupères les lignes de ton fichier une par une et pour chacune d'entre elles tu fais quelque chose du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    CString str; //la ligne que tu as récupérée
    CString str_temp; //une variable temporaire qui contiendra l'élément récupéré
    int curPos = 0; //l'index de str auquel commence la recherche (on commence par l'index 0)
     
    str_temp = str.Tokenize(_T(";"),curPos); //tu récupères la valeur entre curPos et la position du prochain ";" (curPos est mis à jour avec la position de ce dernier)
    while (str_temp != _T("")) //on itère le procédé jusqu'à la fin de la chaîne
    {
       /* récupérer la valeur contenue dans str_temp et faire ce que tu veux avec */
       str_temp = str.Tokenize(_T(";"), curPos);
    };

  8. #8
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 35
    Par défaut
    Merci du complément d'info, j'y vois plus clair maintenant sur la manière d'utiliser tokenize. Le seul problème est lorsque je compile, dans mon .cpp, j'ai fait un #include "cstringt.h" comme indiqué dans l'exemple et la le compilateur me balance l'erreur cannot open include file : 'cstringt.' : no such file or directory.

    Je ne vois pas d'où viens le souci!

  9. #9
    Membre éprouvé
    Avatar de TheGzD
    Homme Profil pro
    Ingénieur/ Docteur en Informatique
    Inscrit en
    Avril 2007
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur/ Docteur en Informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 327
    Par défaut
    Ne l'inclue pas.
    C'est pour supporter plusieurs types de codage différents, en l'occurence ça t'es égale tu utiliseras un CString tout simplement.

  10. #10
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 35
    Par défaut
    Ben oui j'ai essayé ca aussi de mettre juste #include <CString>, mais là il me balance que tokenize n'est pas un membre de CString.

  11. #11
    Membre éprouvé
    Avatar de TheGzD
    Homme Profil pro
    Ingénieur/ Docteur en Informatique
    Inscrit en
    Avril 2007
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur/ Docteur en Informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 327
    Par défaut
    c'est mal de faire ça ! surtout que ça ne peut pas correspondre à quoi que ce soit (je t'invite à te renseigner sur include pour en savoir plus)

    Quoi qu'il en soit le fait d'utiliser les MFC te donne directement accès à la classe CString.

  12. #12
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 35
    Par défaut
    Oups je croyais qu'on pouvait faire comme cela aussi pour les include.
    Bref le problème reste entier puisque de toute façon même sans mettre le include il me balance la même erreur sans arrêt.

  13. #13
    Membre éprouvé
    Avatar de TheGzD
    Homme Profil pro
    Ingénieur/ Docteur en Informatique
    Inscrit en
    Avril 2007
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur/ Docteur en Informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 327
    Par défaut
    Si besoin rajoute
    mais je trouve étrange que ton stdafx.h ne te l'inclue pas déjà

  14. #14
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 393
    Par défaut
    Déjà, de quelle version de Visual s'agit-il?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  15. #15
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 35
    Par défaut
    C'est visual c++ 6
    Obsoléte je sais, mais ce n'est pas mon choix

  16. #16
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 35
    Par défaut
    Bon et bien je crois que décidement visual doit m'en vouloir, même en rajoutant ce que tu as dit il me sort toujours la même erreur.
    Cela viens peut être de la partie que j'ai rajouté :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    bool CChargementBoiteAntenneEtAntenneDlg::loadBA(CString strFileBA){
    	CString str; //la ligne récupérée
    	CString str_temp; //une variable temporaire qui contiendra l'élément récupéré
    	int curPos = 0; //l'index de str auquel commence la recherche (on commence par l'index 0)
     
    	str_temp = str.Tokenize(_T(";"),curPos); //récupère la valeur entre curPos et la position du prochain ";" (curPos est mis à jour avec la position de ce dernier)
    	while (str_temp != _T("")) //on itère le procédé jusqu'à la fin de la chaîne
    	{
    	/* récupérer la valeur contenue dans str_temp*/
    		str_temp = str.Tokenize(_T(";"), curPos);
    	}
    }

  17. #17
    Membre éprouvé
    Avatar de TheGzD
    Homme Profil pro
    Ingénieur/ Docteur en Informatique
    Inscrit en
    Avril 2007
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur/ Docteur en Informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 327
    Par défaut
    Citation Envoyé par greg80 Voir le message
    Bon et bien je crois que décidement visual doit m'en vouloir, même en rajoutant ce que tu as dit il me sort toujours la même erreur.
    Cela viens peut être de la partie que j'ai rajouté :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    bool CChargementBoiteAntenneEtAntenneDlg::loadBA(CString strFileBA){
        CString str; //la ligne récupérée
        CString str_temp; //une variable temporaire qui contiendra l'élément récupéré
        int curPos = 0; //l'index de str auquel commence la recherche (on commence par l'index 0)
     
        str_temp = str.Tokenize(_T(";"),curPos); //récupère la valeur entre curPos et la position du prochain ";" (curPos est mis à jour avec la position de ce dernier)
        while (str_temp != _T("")) //on itère le procédé jusqu'à la fin de la chaîne
        {
        /* récupérer la valeur contenue dans str_temp*/
            str_temp = str.Tokenize(_T(";"), curPos);
        }
    }
    déjà je vois que tu n'as pas remplacé les str par strFileBA : même si ça compilait ça ne ferait rien.
    peux-tu copier-coller l'erreur exacte stp ?

  18. #18
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 35
    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
     
    bool CChargementBoiteAntenneEtAntenneDlg::loadBA(CString strFileBA)
    {
    	CString strFileBA; //la ligne récupérée
    	CString str_temp; //une variable temporaire qui contiendra l'élément récupéré
    	int curPos = 0; //l'index de str auquel commence la recherche (on commence par l'index 0)
     
    	str_temp = strFileBA.Tokenize(_T(";"),curPos); //récupère la valeur entre curPos et la position du prochain ";" (curPos est mis à jour avec la position de ce dernier)
    	while (str_temp != _T("")) //on itère le procédé jusqu'à la fin de la chaîne
    	{
    	/* récupérer la valeur contenue dans str_temp*/
    		str_temp = strFileBA.Tokenize(_T(";"), curPos);
    	}
    }
    Voilà ici j'ai déjà remplacé les str par strFileBA et voilà les erreurs que cela me donne :

    ChargementBoiteAntenneEtAntenneDlg.cpp
    d:\Documents and Settings\t0106841\Mes documents\stage Grégory Boully 02.09 à 08.09\programme CPF\CPF Version G.Boully\ChargementBoiteAntenneEtAntenne\ChargementBoiteAntenneEtAntenneDlg.cpp(411) : error C2082: redefinition of formal parameter 'strFi
    leBA'
    d:\Documents and Settings\t0106841\Mes documents\stage Grégory Boully 02.09 à 08.09\programme CPF\CPF Version G.Boully\ChargementBoiteAntenneEtAntenne\ChargementBoiteAntenneEtAntenneDlg.cpp(415) : error C2039: 'Tokenize' : is not a member of 'CStrin
    g'
    c:\atgl\microsoft visual studio\v60\vc98\mfc\include\afx.h(368) : see declaration of 'CString'
    d:\Documents and Settings\t0106841\Mes documents\stage Grégory Boully 02.09 à 08.09\programme CPF\CPF Version G.Boully\ChargementBoiteAntenneEtAntenne\ChargementBoiteAntenneEtAntenneDlg.cpp(419) : error C2039: 'Tokenize' : is not a member of 'CStrin
    g'
    c:\atgl\microsoft visual studio\v60\vc98\mfc\include\afx.h(368) : see declaration of 'CString'
    Error executing cl.exe.

    ChargementBoiteAntenneEtAntenneDlg.obj - 3 error(s), 0 warning(s)


  19. #19
    Membre éprouvé
    Avatar de TheGzD
    Homme Profil pro
    Ingénieur/ Docteur en Informatique
    Inscrit en
    Avril 2007
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur/ Docteur en Informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 327
    Par défaut
    Voilà ici j'ai déjà remplacé les str par strFileBA et voilà les erreurs que cela me donne :
    sauf que c'est le paramètre de la fonction donc il ne faut pas le redéclarer comme tu l'as fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    bool CChargementBoiteAntenneEtAntenneDlg::loadBA(CString strFileBA)
    {
        CString strFileBA; //la ligne récupérée
    Corrige déjà ça et tu n'auras plus la 1ere erreur.

    Pour la suite c'est cuit car VC++6 n'implémente pas la méthode Tokenize pour CString ...

  20. #20
    Membre éprouvé
    Avatar de TheGzD
    Homme Profil pro
    Ingénieur/ Docteur en Informatique
    Inscrit en
    Avril 2007
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur/ Docteur en Informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 327
    Par défaut
    Pour toujours rester avec une méthode basée sur un token il va te falloir utiliser strtok qui est un peu plus bas niveau : http://msdn.microsoft.com/en-us/library/2c8d19sb(VS.71).aspx

    Bon courage.

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

Discussions similaires

  1. Lecture d'un fichier .dbf
    Par San Soussy dans le forum Autres SGBD
    Réponses: 8
    Dernier message: 07/07/2004, 16h30
  2. Réponses: 6
    Dernier message: 02/09/2003, 15h12
  3. Lecture et ecriture fichier .ini
    Par despe dans le forum C
    Réponses: 6
    Dernier message: 23/07/2003, 20h40
  4. [langage] Optimiser la lecture d'un fichier
    Par And_the_problem_is dans le forum Langage
    Réponses: 4
    Dernier message: 05/02/2003, 08h54
  5. [langage] Optimiser la lecture d'un fichier
    Par And_the_problem_is dans le forum Langage
    Réponses: 2
    Dernier message: 11/06/2002, 10h24

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