klitzounet
Messages postés28Date d'inscriptionmercredi 8 novembre 2006StatutMembreDernière intervention15 mai 2009
-
5 déc. 2007 à 16:00
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019
-
5 déc. 2007 à 22:08
Bonjour
J'ai un code C++ qui fonctionne parfaitement (j'ai travaillé longtemps à partir d'une source -> je suis plutôt débutant, pour réussir à l'adapter à mes besoins et m'en servir convenablement) seulement j'aimerais ajouter une fonction que je n'ai pas réussi à comprendre dans les forums.
C'est tout simplement le suppression de 4 caractères à la fin d'un chaine (ici l'extension des fichiers).
En php c'est SUBSTR en C++ c'est STRST (je crois quelque chose comme ca) mais je ne m'en sort pas
Pouvez vous m'aider à comprendre stp ?
Voici mon code :
//recherche du path du repertoire courant
GetModuleFileName( 0, szAppPath, sizeof( szAppPath ) - 1 );
printf("szapp %s\n", szAppPath);
//découpage de la partie qui nous intéresse (sans le nom listFiles.exe)
for(i=0;i<strlen(szAppPath)-14;i++) {
chemin[i] = szAppPath[i];
}
szAppPath[i] = '\0';
//ouverture du fichier xml à editer
FILE *f = fopen(strcat(chemin, "
[file://listfiles.xml/
\\listFiles.xml
]
"), "w+");
fprintf(f, "<database>\n");
*.* "), &wfd );
if (hfind != INVALID_HANDLE_VALUE) {
do{
// vérifie si c'est un répertoire ou non
if (!( wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY )) {
fprintf(f, "\t\n", wfd.cFileName);
}
i++;
Voila ! c'est la phrase en rouge qu'il faudrait modifier je pense pour réussir à supprimer les 4 derniers caractères de la chaine (ex: .mp3)
J'attend des réactions Merci d'avance à bientôt.
klitzounet
Messages postés28Date d'inscriptionmercredi 8 novembre 2006StatutMembreDernière intervention15 mai 2009 5 déc. 2007 à 21:53
Merci beaucoup à Buno !!!!!
Il à réussi à me dicter (c'est le mot) la solution :
// vérifie si c'est un répertoire ou non
if (!( wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY )) {
// supprime l'extension avec le "." (4 caractères)
char *P=wfd.cFileName;
while(*P!='\0')P++;
P-=4;
*P='\0';
// inscris la ligne d'indexation du fichier trouvé
fprintf(f, "Fichier mp3=%s \n", wfd.cFileName);
-> Ce qui est en vert est la solution qu'il m'a apporté
klitzounet
Messages postés28Date d'inscriptionmercredi 8 novembre 2006StatutMembreDernière intervention15 mai 2009 5 déc. 2007 à 16:43
Merci pour vos réponses si rapides mais je ne comprend pas très bien ...
Deja je pense que ce qu'a dit BruNews ne fonctionnera pas car mettre un 0 dans ma ligne
fprintf(f, "\t\n", wfd.cFileName);
ne devrait pas aller je crois ^^. En plus je le met où ce 0 ?? :S Si je l'insère entre les "" cela va l'afficher dans le résultat final.
La réponse de Pistol_Pete me paraît plus appropriée car le positionnement du pointeur est ce que je recherche mais je ne comprend pas non plus ce que tu me demande de faire :S Désolé j'ai prévenu que j'étais plutôt débutant (pas nul non plus mais pas expert ).
Si c'est possible et réalisable (accumulation de 2 mots équivalent pour inssister sur le fait :P ) j'aimerais que quelqu'un me fasse un exemple tout simple.
Par exemple la commande pour afficher "Bonjour vous" mais lors de l'execution, supprimer le " vous" pour qu'il ne reste que "Bonjour".
En C++ biensur ^^ je pense que quelqu'un de calé sur le sujet ne devrais pas trop perdre de temps à réfléchir la-dessus
Merci
Vous n’avez pas trouvé la réponse que vous recherchez ?
BunoCS
Messages postés15472Date d'inscriptionlundi 11 juillet 2005StatutModérateurDernière intervention25 mars 2024103 5 déc. 2007 à 16:51
Yop!
A mon tour de proposer une solution:
char *pos=strrchr(taChaine, '.'); // Recherche du point avant l'extension, cad, la dernière occurence du point
*pos=0; // Mettre 0 comme l'a dit BruNews
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Le site de mon mariage
BunoCS
Messages postés15472Date d'inscriptionlundi 11 juillet 2005StatutModérateurDernière intervention25 mars 2024103 5 déc. 2007 à 16:53
A savoir qu'une extension n'est pas limitée à 3 caractères....
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Le site de mon mariage
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 5 déc. 2007 à 16:55
On a dit tous les 2 la même chose, le 0 va dans la chaine et non dans une commande (fprintf ou autre).
char *c = LaChaineQueTuVeuxTronquer;
while(*c) c++; // EST SUR 0 DE FIN DE CHAINE
if((c - LaChaineQueTuVeuxTronquer) >= 4) { // VERIF SI ON PAUT ALLER 4 EN ARRIERE
*(c-4) = 0; // CHAINE TRONQUEE DE 4 CARACTERES
}
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 5 déc. 2007 à 16:58
c'est clair qu'une extension n'est pas de 4 à tout coup mais vu le niveau débutant, vaut mieux s'en tenir là sinon que donnerait ta solution avec:
d:\mon.dossier\readme
un '.' dans dossier et pas d'extension au fichier...
klitzounet
Messages postés28Date d'inscriptionmercredi 8 novembre 2006StatutMembreDernière intervention15 mai 2009 5 déc. 2007 à 17:04
Merci de me considérer comme tel ! je ne suis pas abrutis au point de ne pas connaitre mes extensions :) Je suis peut-être grand débutant en C++ mais pas sur d'autres sujets en informatique. Bref ce n'est pas le thème. Merci encore de tous avoir répondu.
Je teste tout de suite vos différentes propositions... je donne de mes nouvelles plus tard
BunoCS
Messages postés15472Date d'inscriptionlundi 11 juillet 2005StatutModérateurDernière intervention25 mars 2024103 5 déc. 2007 à 17:08
BruNews > Le résultat serait inexploitable, bien sûr....mais c'est idem dans votre solution, non?
En tout cas, maintenant, notre ami devrait s'en sortir...
D'ailleurs, inutile de cliquer sur "Réponse Acceptée" à chaque réponse
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Le site de mon mariage
klitzounet
Messages postés28Date d'inscriptionmercredi 8 novembre 2006StatutMembreDernière intervention15 mai 2009 5 déc. 2007 à 17:20
C'est vrai ?? Je pensais qu'il fallait le faire à chaque fois pour faire marcher le forum -> donner des points à ceux qui postent. Mais si c'est pas utile tant mieux parce que c'est pénible à faire
En tout cas merci Buno tes réponses me parraissent les meilleures ;) Penses-tu pouvoir combiner :
char szPath[20]="Bonjour vous";
char *P=szPath;
while(*P!='\0')P++;
P-=5;
*P='\0';
printf("%s\n",szPath);
avec
fprintf(f, "Fichier mp3=%s \n", wfd.cFileName);
BunoCS
Messages postés15472Date d'inscriptionlundi 11 juillet 2005StatutModérateurDernière intervention25 mars 2024103 5 déc. 2007 à 17:34
Yep, je ne vois pas de souci. Si ce n'est que tu ne puisses pas modifier la variable wfd.cFileName. Je te conseille donc de la mettre dans une chaine.
NB: Je ne pense pas que la "réponse acceptée" apporte plus de points à celui qui la donne . ça sert sourtout si quelqu'un, plus tard, à le même problème que toi: il cherche la case verte pour trouver la réponse...
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Le site de mon mariage
BunoCS
Messages postés15472Date d'inscriptionlundi 11 juillet 2005StatutModérateurDernière intervention25 mars 2024103 5 déc. 2007 à 17:36
BruNews > Il ne manquerais pas l'étoile dans le paramètre de ta fonction?
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Le site de mon mariage