begin process at 2010 02 10 01:08:17
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Base de données

 > 

XML

 > 

Suppression de caractères (extension) dans une chaine C++


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Suppression de caractères (extension) dans une chaine C++

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ée 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 Chaine de caractères et liste de mots [ par joshua509 ] J'ai un gros problème d'algorithme. Comment faire pour placer,tous les mots séparer d'un espace d'une chaine de caractère,dans une liste chainée de mo Test sur chaine de caractères [ par valoch33 ] Bonjour à tous, J'ai un petit problème pour faire mon programme. En effet, je veux faire saisir des données par un utilisateur, comme son nom et son p 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 Enlever les caractères non affichables d'un chaine de caractères [ par mmaximum ] Bonjour à tous,Je cherche un moyen d'enlever tous les caractères spéciaux d'un chaines ( accents,signes spéciaux) pour les remplacer par la lettre san comment recherecher un mot dans une chaine de caractères ?? [ par yosboss ] Salut à tous,je sollicite votre aide pour rechercher un mot dans un ensemble de chaine de caractère contenu dans un ficher ! 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


Nos sponsors


Sondage...

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), 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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,468 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales