Accueil > Forum > > > > supprimer l'extension
supprimer l'extension
vendredi 2 mai 2008 à 20:28:25 |
supprimer l'extension

F0ra
|
Bonjour,
Je voudrais supprimer uniquement l'extension d'un fichier.
Exemple :
Char test[64]="C:\\XXX\\WWW\\FFF.txt";
strtok(test, ".");
SetWindowText(GetDlgItem(hdlg,IDC_EDIT1),test)
J'obtiens bien : C:\XXX\WWW\FFF
Le problème, c'est si il y a plusieurs « . », ça ne fonctionne plus.
Comme : "C:\\XXX\\WW.W\\FFF.txt"
Il y a-t-il moyen de résoudre le problème et comment ?
Merci beaucoup
@+
|
|
vendredi 2 mai 2008 à 20:38:09 |
Re : supprimer l'extension

jfrancois
|
Réponse acceptée !
Bonjour, Il faut rechercher le premier "." à partir de la fin et le remplacer par un 0 terminateur. for (int i=strlen(test)-1 ; i>=0 ; --i) { if (test[i] == '.') { test[i] = 0; break; // trouvé } }
Jean-François
|
|
vendredi 2 mai 2008 à 20:43:37 |
Re : supprimer l'extension

F0ra
|
bonjour,
ok, ça fonctionne.
merci Jean-François
@+
|
|
vendredi 2 mai 2008 à 20:59:08 |
Re : supprimer l'extension

jeffy131
|
C'est surtout une horreur.
Réviser (ou apprendre) les bases du C pour utiliser les fonctions standards : strrchr () notamment
|
|
vendredi 2 mai 2008 à 22:09:09 |
Re : supprimer l'extension

jfrancois
|
Bien sûr ! Monter toute une usine à gaz avec strchr() pour chercher la dernière occurence d'un caractère ! Ca c'est bigrement efficace et parlant ! Comment voulez-vous que strchr() s'arrête sur la dernière occurence d'un caractère sans aller jusqu'au bout de la chaîne pour constater que c'était bien la dernière occurence ?
Aller jusqu'au bout de la chaîne, c'est ce que fait, très rapidement, strlen() pour compter les caractères et ensuite il n'y a plus qu'à faire un minimum de reculs jusqu'au dernier ".". Et tout ça peut être encore optimiser avec un petit pointeur de caractères !
Jean-François
|
|
vendredi 2 mai 2008 à 22:34:06 |
Re : supprimer l'extension

SAKingdom
|
Le cas où strrchr (ou équivalent) pourrait être plus performant est si l'occurrence recherchée se trouve avant la moitié de la chaine ou encore, si elle n'existe tout simplement pas dans la chaine. Autrement, la méthode proposé par jfrancois est la plus rapide. Par exemple, sur un chaine de 20 caractères + 0 de fin de chaine, strrchr devra faire 41 tests. La méthode de jfrancois ira jusqu'au 0 de fin de chaine (21 tests) puis reviendra. Si l'extension est .exe, on ajoutera 8 tests. 29 tests en tout. Cependant, si l'extension est avant la moitié de la chaine ou n'existe pas, on dépassera les 41 tests. C++ (@++)
|
|
vendredi 2 mai 2008 à 22:36:15 |
Re : supprimer l'extension

SAKingdom
|
"Cependant, si l'extension est avant la moitié..." -> Cependant, si l'occurence est avant la moitié... C++ (@++)
|
|
samedi 3 mai 2008 à 10:47:17 |
Re : supprimer l'extension

BruNews
|
D:\mon.dossier\test.txt jeffy131 : Tu penses trouver le bon résultat avec ta fonction 'standard' ??? Faudrait arrêter de balancer des remarques sentencieuses, une horreur standard n'en reste pas moins une horreur quand le résultat est faux.
void DelExt(char *f) { while(*f) f++; while(*--f != '\\') if(*f == '.') {*f = 0; break;} } Tout comme pour autre fonction de chaine, l'utilisateur est prié de passé un FICHIER, ce qui implique qu'il y a au moins un '\\' dedans sinon badaboum. strlen() et autres (C standard) font ainsi pour efficacité. Un dev C est une personne responsable sinon on va faire du VB.
ciao... BruNews, MVP VC++
|
|
samedi 3 mai 2008 à 13:21:05 |
Re : supprimer l'extension

BruNews
|
OUPS, pour jeffy131, tester strrchr() avec D:\mon.dossier\test
un fichier n'a pas obligatoirement une extension et un dossier peut contenir un '.'.
ciao... BruNews, MVP VC++
|
|
samedi 3 mai 2008 à 13:45:03 |
Re : supprimer l'extension

jfrancois
|
Bonjour,
Pour tenir compte du cas (pas très fréquent mais pas rare non plus !) évoqué par BruNews où : - le fichier n'a pas d'extension - le chemin d'accès contient un répertoire avec un "." Et en oubliant pas qu'il est possible d'utiliser le '/' à la place du '\\' dans les noms de fichiers (excepté avec certaines fonctions comme system() où la chaîne est passée au système qui, lui, ne comprend pas les '/'). Exemple : "D:\\mon.dossier\\test.txt" = "D:/mon.dossier/test.txt" = "D:\\mon.dossier/test.txt" = "D:/mon.dossier\\test.txt".
for (int i=strlen(test)-1 ; i>=0 && test[i]!='\\' && test[i]!='/' ; --i) { if (test[i] == '.') { test[i] = 0; break; // trouvé } } Jean-François
|
|
Cette discussion est classée dans : test, supprimer, extension, xxx, fff
Répondre à ce message
Sujets en rapport avec ce message
Supprimer doublons [ par lombredudragon ]
Voila j'ai un fichier texte contenant des adresses mails.De ce style =>marcel@xxx.comdede@xxx.comjosé@xxx.comDans ce fichier , on est sur qu'il y a de
Problème avec for [ par Scientophage ]
J'ai un gros problème avec l'instruction for quand je tapeint test[5];for (int a=0; a==4; a++){ test[a]=a; coutCa ne m'affiche rien et en plus
test sur variable de type char [ par enrageur ]
j'aimerais indetifier des mots dans un fichier txt. J'ouvre le fichier et je le copy dans un char (data). Ensuite je fais un test pour voir si les deu
algorithme de test sur arbre binaire parfait [ par tapas64 ]
Bonjour,je cherche un algorithme qui me permettrait de tester si un arbre binaire est parfait. Je n'ai rien trouvé en surfant sur le net ou e essayant
Vector Erase : problème [ par Clonk ]
Bonjour,Voilà mon problème, j'utilise un vector pour gérer des aretes d'une figure géométrique, à un moment, je veux supprimer certains éléments dans
supprimer objet de type BITMAP [ par tdeco ]
SalutJ'utilise un objet de type BITMAP que je cré à partir d'un buffer et que j'affiche par la suite.Il y a t-il un moyen de supprimer cet objet après
Conversion str en char [ par bthivent ]
Bonjour !J'aimerai en faite faire une message box : MessageBox(NULL, message, "Connexion", MB_YESNO) avec dedans une message spéciale...je sais que ma
Savoir quand un utilisateur à supprimer un fichier ? [ par nicolos ]
Salut,J'aimerais bien savoir coment intercepter le message de suppression d'un fichier ? Et ainsi permettre son autorisation de suppression ou non. To
test du pointeur [ par jeltimed ]
bonjour .en fait je suis débutant en c++ et je voulais juste savoir est ce que ya moyen d'appliquer la logique suivant en c++: si pointeur pointe
Supprimer icône Fermer [ par larion ]
Bonjour, Sur mon application, je souhaite supprimer l'icône Fermé [X] dans la barre de titre, pour ne laisser que l'icône Minimisé.Comment fait-on ? M
Livres en rapport
|
Derniers Blogs
SESSION SILVERLIGHT 5 3D : SLIDES ET DEMOSSESSION SILVERLIGHT 5 3D : SLIDES ET DEMOS par Groc
Durant les techdays, j'ai eu le plaisir d'animer une session sur Silverlight 5 et la 3D avec Simon Ferquel. Comme promis, voici nos slides et mes démos (celles avec le viper BSG) ici et là. Pour mémoire, les démos utilisent toutes le viper BSG...
Cliquez pour lire la suite de l'article par Groc [TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES[TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES par gpommier
Suite à la session que j'ai présenté sur WebMatrix 2, vous pouvez trouver les slides ici, ainsi que les démos en packages nuget : démos1 et démos2 J'en profite pour remercier chaleureusement tous ceux qui sont venus très nombreux à cette sess...
Cliquez pour lire la suite de l'article par gpommier [SHAREPOINT] LES SESSIONS TECHDAYS 2012.[SHAREPOINT] LES SESSIONS TECHDAYS 2012. par Patrick Guimonet
Voici donc pour ceux qui n'ont pas pu venir, ou ceux qui n'ont pas pu toutes les suivre la liste des sessions SharePoint aux TechDays 2012, que je mettrais à jour dès que les liens des vidéo seront disponibles. Ou ici : http...
Cliquez pour lire la suite de l'article par Patrick Guimonet TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE !MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE ! par Vko
Hier durant une session dédiée aux Techdays 2012, j'ai eu le plaisir d'annoncer la sortie de la Béta 2 de Mishra Reader. C'est quoi ? Pour les utilisateurs, c'est une vraie expérience de lecture de flux RSS sur Windows. Rien à voir avec les produit...
Cliquez pour lire la suite de l'article par Vko
Logiciels
Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning
|