Méthode de tri - C++ - Programmation
Marsh Posté le 17-04-2003 à 00:18:48
Je crois que sa question n'est pas de trier mais de filtrer des noms.
Tu cherches en fait à utiliser des expressions eégulières. Cherche de la doc là dessus (regex).
En C++, tu peux utiliser la classe regex de la bibliotheque boost.
J'ai pas testé mais normalement ça devrait être sérieux.
http://www.boost.org/libs/regex/
Si ton truc se limite simplement à rechercher des sous-chaînes dans une chaine (ex : win dans C:\windows) alors tu peux faire ton truc à la main à l'aide de strstr en C ou alors de la classe string et de la méthode find.
Le probleme de la casse peut se poser.
Il va donc peut etre falloir mettre les chaines en majuscule d'abord.
Marsh Posté le 17-04-2003 à 01:27:44
Sinon j'y pense sous Windows tu peux utiliser FindFirstFile qui accepte comme nom de fichier une expression régulière et te renvoie les noms de fichiers valides ...
Marsh Posté le 17-04-2003 à 21:48:12
merci, je ne savais pas qu'on appelait ça une expression régulière. Vous m'avez bien aidé !
a+
Marsh Posté le 17-04-2003 à 23:16:19
Ben ... Perso, j'ai été confronté à ce problème pas plus tard que la semaine dernière ... (j'ai fait le boulet : j'ai reprogrammé un système de génération de contraintes en fonction des * et ? dans le filtre et j'ai vérifié ensuite si chacun des noms de fichier que je trouvais validait ou non ces contraintes ...)
Normalement, ca s'appelle le globbing de noms de fichiers, non ? (pas sur du tout ...)
Edit : Si tu passes par des expressions régulières, tu ne devrais pas avoir à faire plus que remplacer les '*' par "[.]*" et les '?' par "[.]" ...
Marsh Posté le 16-04-2003 à 23:36:47
salut !
je suis en train de bosser sur un projet c/c++ et je rencontre quelques problèmes... En effet, je dois trier des noms de fichiers. L'utilisateur défini des restrictions du genre, il ne veut pas les fichier *win*, ou *.cpp ... Sachant que le nom d'un fichier est stocké dans un char* ; si le nom de fichier va dans le bon sens, alors je le stocke dans un tableau.
Comment dois-je faire ?
Existe-t-il des méthodes qui me permettraient de le faire ?
merci d'avance de votre aide