Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Suppression de caractères (extension) dans une chaine C++ [ Base de données / XML ] (klitzounet)

mercredi 5 décembre 2007 à 16:00:38 | Suppression de caractères (extension) dans une chaine C++

klitzounet

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 :

#include <windows.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>


//fait la liste des fichiers d'un repertoire et l'enregistre dans un fichier xml
int main() {

 HANDLE hfind;
 WIN32_FIND_DATA wfd;
 char **tab; int i=0;
 

    char szAppPath[ MAX_PATH ] = "";
    char chemin[MAX_PATH] = "";

 //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, "
\\listFiles.xml "), "w+");
    fprintf(f, "<database>\n");

 // Liste le contenu du répertoire
 hfind = FindFirstFile (strcat(strcpy(chemin, szAppPath), "
\\\\ *.* "), &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<Index mylabel=\"%s\" mydata=\"media/...\"></Index>\n", wfd.cFileName);
              }
              i++;

  }while(FindNextFile( hfind, &wfd));
  FindClose(hfind);
 }

 fprintf(f, "</database>");

   //fermeture du fichier
   fclose(f);
  
   return 0;
}

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.


mercredi 5 décembre 2007 à 16:23:19 | Re : Suppression de caractères (extension) dans une chaine C++

BruNews

Administrateur CodeS-SourceS
Par définition, une chaine C finit au 1er zéro rencontré donc tu mets 0 là où tu veux qu'elle finisse.

ciao...
BruNews, MVP VC++

mercredi 5 décembre 2007 à 16:28:33 | Re : Suppression de caractères (extension) dans une chaine C++

Pistol_Pete

Salut
Tu parcours toute ta chaine avec un pointeur:
char *P;
P=szPath;
while(P!='\0')P++;

et tu recules de 4 position et tu met un \0
P-=4;
*P='\0';

A+
Mon site internet : [ Lien ]


mercredi 5 décembre 2007 à 16:43:05 | Re : Suppression de caractères (extension) dans une chaine C++

klitzounet

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<Index mylabel=\"%s\" mydata=\"media/...\"></Index>\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

mercredi 5 décembre 2007 à 16:51:25 | Re : Suppression de caractères (extension) dans une chaine C++

buno

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

mercredi 5 décembre 2007 à 16:52:22 | Re : Suppression de caractères (extension) dans une chaine C++

Pistol_Pete

Ben voila
char szPath[20]="Bonjour vous";
char *P=szPath;
while(*P!='\0')P++;      //tu te places en fin de chaine

P-=5;           //tu te places à l'endroit ou tu veux couper
*P='\0';      //et tu coupes
printf("%s\n",szPath);   //tu affiches bonjour

PS: je te propose exactement la meme méthode que Brunews


Mon site internet : [ Lien ]


mercredi 5 décembre 2007 à 16:53:37 | Re : Suppression de caractères (extension) dans une chaine C++

buno

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

mercredi 5 décembre 2007 à 16:55:46 | Re : Suppression de caractères (extension) dans une chaine C++

BruNews

Administrateur CodeS-SourceS
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
}

Maintenant tu peux envoyer la chaine où tu veux.

ciao...
BruNews, MVP VC++

mercredi 5 décembre 2007 à 16:58:32 | Re : Suppression de caractères (extension) dans une chaine C++

BruNews

Administrateur CodeS-SourceS
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...

ciao...
BruNews, MVP VC++

mercredi 5 décembre 2007 à 17:04:09 | Re : Suppression de caractères (extension) dans une chaine C++

klitzounet

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



1 2

Cette discussion est classé dans : chaine, caractères, hfind, wfd, szapppath


Répondre à ce message

Sujets en rapport avec ce message

Listage xml uniquement des mp3 en C++ [ par klitzounet ] Bonsoir J'ai ce code C++ qui sert à lister le contenu d'un dossier pour l'insérer dans une XML qui elle même servira dans un lecte Découper une chaine de caractères en fonction d'un séparateur [ par julien20vt ] Bonjour,J'aimerais savoir s'il existe un moyen assez simple de découper une chaine de la manière suivante:chaine=ssch1;ssch2;ssch3;.....Je voudrais do retour d'une fonction [ par noulii ] J'ai utilisé la fonction suivante, venant de "bruno" que j'ai trouvé sur ce site :HANDLE hfind;WIN32_FIND_DATA wfd;// Initialise la recherchehfind = F Traitement de chaine de caractères [ par RoulianRoss ] Bonjour, j'ai une chaine de caractère du type PUSH_essai et je veux enlever le préfixe PUSH_ de cette chaine. comment puis-je faire???? Merci extraction des sous-chaine des caractères séparées par des virgules [ par OTHKREEN ] bonjour à tous,j'ai un problème avec les chaines de caractères en C++.j'ai ecrit quelques instructions pour demander à un utilisateur d'entrer une cha Fichier corbeille [ par akalys ] BonjourJ'aimerais afficher dans une listview les fichiers contenu dans la corbeille.Voici mon code :            HANDLE hfind;        WIN32_FIND_DATA w concaténer un caractère a une chaine de caractères [ par deck_bsd ] Bonjour, voila g un petit problem, ds mon programe je converti un int en char, mais apres je veu le concaténer en faisant strcat(chaine_de_caract,car remplacer un caractere par plusieur un autre dans une chaine [ par shadow1779 ] Bonsoir, je me trouve avec le code suivant afin de lister tout ce qu'il y a dans un dossier, je recupere la chaine gamepath en allant chercher dans remplir un tableau avec des chaines de caractères (C) [ par djibfr ] Bonjour à tous! Alors voila, j'ai un petit problème tout bête mais je n'arrive pas à la résoudre et mes recheches ne m'ont pas trop éclairé. Je souhai


Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,374 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.