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 :

[MFC]CFILE & CString::Right(nbre indéfini) ?


Sujet :

MFC

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

    Informations forums :
    Inscription : Avril 2006
    Messages : 51
    Par défaut [MFC]CFILE & CString::Right(nbre indéfini) ?
    Bonjour,

    je me demandais comment je pouvais faire pour n'extraire qu'une ligne d'un fichier CFile et apparement ce n'est pas une fonction disponible dans cette classe.
    J'ai par exemple un fichier de plusieurs lignes du genre :

    ...
    COMMUNICATION_PATH=C:\...\...\...\fichier.txt
    ...

    et je voudrais pouvoir extraire de cette ligne le chemin C:\...\...\...\fichier.txt.
    Je pensais pouvoir le faire avec la méthode CString::Right(nCount) mais le problème est que la longueur du chemin n'est pas connue à l'avance et peut-être plus ou moins longue.

    Pouvez vous m'aider? Avez vous des propositions à me faire qui pourraient apporter une solution à mon problème?

    Merci à tous

  2. #2
    Membre Expert
    Avatar de hiko-seijuro
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 011
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Par défaut
    tu m'excuse mais je n'ai rien compris à ta question :s

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 391
    Par défaut
    bonjour

    essaie avec un truc du genre

    int i = 0;

    while (CString::GetAt(i) != '=') i++;
    CString::Right(i+1);

    cordialement

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 51
    Par défaut
    tu m'excuse mais je n'ai rien compris à ta question :s

    Alors disons que j'ai un objet de type CFILE qui contient plusieur lignes. Chaque ligne est composée d'un nom en majuscule + signe"=" + path
    et moi, dans mon programme, je voudrais pouvoir récupérer seulement le path. Je pensais pouvoir faire ça avec la fonction Right(nCount) de la classe CString mais pour cela, il faut connaitre à l'avance le nombre de caratère (donc nCount) que l'on veut récupérer et je ne le connais pas à l'avance.

    je sais pas si je suis plus clair....


    essaie avec un truc du genre

    int i = 0;

    while (CString::GetAt(i) != '=') i++;
    CString::Right(i+1);
    En fait je crois qu'avec ce que tu m'a donné je récupère le début de ma ligne jusqu'au signe égal mais moi je veux la fin de ma ligne après le signe égal.
    Néanmoins ton idée n'est pas mauvaise, il me suffit peut-être de faire :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    CString s = "COMMUNICATION_PATH=";
     
    int i = s.getLenght();
    int y = 0;
     
    while (CString::GetAt(i) != "") y++;
    CString::Right(y+1);
    donc je chercher le caractère de fin de ligne à partir du signe =

    merci

  5. #5
    Membre Expert
    Avatar de hiko-seijuro
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 011
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Par défaut
    euh bah moi je vois ca comme ca si j'ai bien compris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    CString str, stsource; // stsource contient le contenu de ton fichier
     
    str = stsource.Right(stsource.GetLength() - stsource.Find("=")  - 1);
    str = str.Left(str.Find("\r\n"));

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 391
    Par défaut
    desolé je me suis trompé dans la methode right tu peux en effet

    s contient ta ligne entiere provenant de ton fichier

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    int i = s.getLenght();
    while (CString::GetAt(i) != '=') i--;
    CString::Right(i); //verifie s'il faut i ou i+1 ou i-1
    cordialement

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 51
    Par défaut


    merci pour toutes vos réponses.
    je m'en vais tester ça avant de mettre résolu!

  8. #8
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 392
    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 392
    Par défaut
    CString::Mid(i+1) ne suffit pas?
    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.

  9. #9
    Membre Expert
    Avatar de hiko-seijuro
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 011
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Par défaut
    bah euh ca dépend s'il est au milieu nan ?

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 51
    Par défaut

    Tu sais qu't'es doué toi

    merki

  11. #11
    Membre Expert
    Avatar de hiko-seijuro
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 011
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Par défaut
    de qui tu parles ?

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 51
    Par défaut
    en fait c'était pour Médinoc mais tu m'as aussi bcp aidé dans d'autres post alors tu peux prendre ça aussi pour toi

  13. #13
    Membre Expert
    Avatar de hiko-seijuro
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 011
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Par défaut
    lol

    oublie pas le tag résolu

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 51
    Par défaut
    en fait, la methode CString::Mid(int) n'a pas l'air de fonctionner comme je le voudrais.
    Est-ce normal que, si j'ai un fichier de plusieur lignes, la methode Mid me retourne tout les reste de mon fichier et pas seulement la fin de ma CString?

    exemple :
    Voici un exemple de fichier:

    ITP=tutututututu
    COM_PATH=blablabla
    ERP=tototototototototo
    FSA=tototototot

    je veus récupérer juste le blablabla

    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 CValidProd3Doc::AnalyseFileConfigOutil(CString s)
    {
    	s.Remove('\t');
     
    	int pos = s.Find("COM_PATH=",0);
    	if (pos == -1)
    	{
    		return FALSE;
    	}
    	else
    	{
    		CString found;
    		found = s.Mid(pos+9);
                              ...
    Mon bout de code me donne :
    found = {"blablabla
    ERP=tototototototototo
    FSA=tototototot"}

    au lieu de {"blablabla"}

    Dans la MSDN, je comprend que si l'on ne précise pas le nombre de caractère que l'on souhaite récupérer, alors ça extrait le reste de la chaine de caratère.
    Ce que j'obtient est-il alors normal?

  15. #15
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 392
    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 392
    Par défaut
    Tu es sûr que ta CString ne fait pas elle-même tout le fichier ?
    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.

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 51
    Par défaut
    EXACT ! Tu as tout a fait raison !!! des fois, les betises les plus grosses sont celles qu'on voit le moins!
    Du coup, je vais faire un peu comme dans les exemples du dessus je pense, car je ne vois pas trop d'autre solution. Mais si tu en a une mieux...

    merci

  17. #17
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 51
    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
    BOOL CValidProd3Doc::AnalyseFileConfigOutil(CString s)
    {
    	//s.MakeUpper();
    	//s.Remove(' ');
    	s.Remove('\t');
     
    	int pos = s.Find("COM_PATH=",0);
    	if (pos == -1)
    	{
    		return FALSE;
    	}
    	else
    	{
    		CString found;
    		int i=0;
     
    		found = s.Mid(pos+9);
    		found = found.Left(found.Find("\r\n",pos+9));
    En rajoutant la dernière ligne ça fonctionne très bien avec une très bonne idée de hiko-seijuro.

    Merci à tous pour votre aide précieuse

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MFC] CFile, taille maximale?
    Par r0d dans le forum MFC
    Réponses: 3
    Dernier message: 23/12/2005, 10h26
  2. [MFC] CFile
    Par CTux dans le forum MFC
    Réponses: 3
    Dernier message: 13/07/2005, 14h20
  3. [MFC] CFile::Duplicate()
    Par r0d dans le forum MFC
    Réponses: 2
    Dernier message: 05/06/2005, 14h36
  4. [MFC] Découpage de CString
    Par MrMaze dans le forum MFC
    Réponses: 18
    Dernier message: 17/05/2005, 10h02
  5. [MFC] Limitation des CString
    Par Aradesh dans le forum MFC
    Réponses: 2
    Dernier message: 15/04/2005, 10h40

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