Extraction de données dans un char[260]

Résolu
seb2086 Messages postés 96 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 1 février 2010 - 2 mars 2007 à 18:25
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 - 3 mars 2007 à 19:23
Bonjour,

char variable[260] = "C:\Mes docs\Dossier\Objet.X" ;

Voila en fait je voudrais récupérer dans une autre variable seulement Objet.X.
En gros il faut que je récupére tout ce qu'il y'a aprés le dernier "".

Merci de vos réponses.

8 réponses

yoyo269 Messages postés 1403 Date d'inscription lundi 23 février 2004 Statut Membre Dernière intervention 11 janvier 2009 2
2 mars 2007 à 18:36
Salut seb2086 !

Travaille avec les pointeurs, ya rien de mieux.
Aller je me lance, au risque de me faire sécher.

char variable[260] = "C:\\Mes docs\\Dossier\\Objet.X" , variable2[100];
char* c, * d;c d variable;
while(*c) // tant qu'on a pas atteint la fin de la chaine
{   if(*c '\\') d c + 1; // on mémorise le dernier emplacement d'un \
   c++; // on passe au caractère suivant
}
if(d != c) strcpy(variable2, d); // si il y a bien quelque chose après le dernier \, on copie tout ce qui suit dans variable2

Ca t'aidera sûrement, mais pense surtout à bien comprendre. Sinon ça ne te servira à rien.

YOYO, @+.
"L'intelligence c'est comme un parachute, quand on en n'a pas...on s'écrase !"
____________________________________________
[Site officiel de YoyoCut, découpe fichiers open source]
3
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
2 mars 2007 à 21:07
char *FileName (char *path)
{
    char *ret = path;
    if(!path || !*path) return 0;    do if(*path++ '\\')  ret path; while(*path);
    return ret;
}

C++ (@++)<!--
3
seb2086 Messages postés 96 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 1 février 2010
3 mars 2007 à 12:56
[auteurdetail.aspx?ID=235265 yoyo269] Merci de ta réponse mais le programme reste dans la boucle while il n'en sors pas donc il y 'a un probleme quelque part.

Merci.
0
seb2086 Messages postés 96 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 1 février 2010
3 mars 2007 à 12:58
Non j'ai rien dit c'est moi qui me suis planté.
Merci ca marche nikel ;)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
yoyo269 Messages postés 1403 Date d'inscription lundi 23 février 2004 Statut Membre Dernière intervention 11 janvier 2009 2
3 mars 2007 à 13:37
seb2086 > Pas de quoi mais utilise plutôt la fonction de SAKingdom, c'est plus correct et surtout plus rapide.
Mais bon c'est toi qui décide.

SAKingdom > décidément je persiste avec mon strcpy qui me fait faire du boulot en plus !!!

YOYO, @+.
"L'intelligence c'est comme un parachute, quand on en n'a pas...on s'écrase !"
____________________________________________
[Site officiel de YoyoCut, découpe fichiers open source]
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
3 mars 2007 à 14:12
Stocker le nom dans un tableau devien nécessaire SI et seulement SI on veut avoir le nom pour le modifier. Si c'est simplement pour une comparaison, un simple pointeur sur la chaine principal suffis.
Rien n'empeche non plus d'utiliser ma fonction avec un strcpy:

strcpy(dest, FileName(filepath));

C++ (@++)<!--
0
yoyo269 Messages postés 1403 Date d'inscription lundi 23 février 2004 Statut Membre Dernière intervention 11 janvier 2009 2
3 mars 2007 à 14:25
Oui bien sûr, mais la tienne laisse le choix à l'utilisateur, elle est donc mieux.
D'ailleurs je vais te la piquer !

YOYO, @+.
"L'intelligence c'est comme un parachute, quand on en n'a pas...on s'écrase !"
____________________________________________
[Site officiel de YoyoCut, découpe fichiers open source]
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
3 mars 2007 à 19:23
Si le code est sûr, tu peux retirer le
if(!path || !*path) return 0;

Aussi, ce serait peut-être mieu de "inliner" la fonction pour éviter un CALL (en plus du PUSH pour l'argument (si en stdcall)).

C++ (@++)<!--
0
Rejoignez-nous