Sachant que c'est moi qui maitrise l'écriture, donc le nom et l'extension de mes fichiers donc la casse aussi.
Le problème n'est pas celui de la casse (drôle de traduction) qui est anecdotique. Pour moi, si on écrit en C, avec toutes les douleurs que cela représente, c'est pour écrire des programme performants, même si les fonctions sous-jacentes sont bien écrites il faut éviter de scanner des chaînes de caractère, du moins pas plus qu'une fois.
Sachant que c'est moi qui maitrise l'écriture, donc le nom et
l'extension de mes fichiers donc la casse aussi.
Le problème n'est pas celui de la casse (drôle de traduction) qui est
anecdotique.
Pour moi, si on écrit en C, avec toutes les douleurs que cela
représente, c'est pour écrire des programme performants, même si les
fonctions sous-jacentes sont bien écrites il faut éviter de scanner des
chaînes de caractère, du moins pas plus qu'une fois.
Sachant que c'est moi qui maitrise l'écriture, donc le nom et l'extension de mes fichiers donc la casse aussi.
Le problème n'est pas celui de la casse (drôle de traduction) qui est anecdotique. Pour moi, si on écrit en C, avec toutes les douleurs que cela représente, c'est pour écrire des programme performants, même si les fonctions sous-jacentes sont bien écrites il faut éviter de scanner des chaînes de caractère, du moins pas plus qu'une fois.
Le troisième paramètre est une fonction qui sera apellée pour chaque fichier. Dans cette fonction, tu dois regarder si le fichier est bien un ..txt (comparaison du nom), et retourner 1 si c'est le cas, 0 sinon. La strcture dirent passée en param à cette fonction contient le nom du fichier, donc rien de bien compliqué.
Merci pour la reponse, voici donc la fonction qui me permet de filtrer les "*.txt" :
Le Sat, 21 Apr 2007 14:56:25 +0200, matt <matt@mata.com> a écrit:
Le troisième paramètre est une fonction qui sera apellée pour chaque
fichier. Dans cette fonction, tu dois regarder si le fichier est bien
un ..txt (comparaison du nom), et retourner 1 si c'est le cas, 0 sinon.
La strcture dirent passée en param à cette fonction contient le nom du
fichier, donc rien de bien compliqué.
Merci pour la reponse, voici donc la fonction qui me permet de filtrer
les "*.txt" :
Le troisième paramètre est une fonction qui sera apellée pour chaque fichier. Dans cette fonction, tu dois regarder si le fichier est bien un ..txt (comparaison du nom), et retourner 1 si c'est le cas, 0 sinon. La strcture dirent passée en param à cette fonction contient le nom du fichier, donc rien de bien compliqué.
Merci pour la reponse, voici donc la fonction qui me permet de filtrer les "*.txt" :
Sachant que c'est moi qui maitrise l'écriture, donc le nom et l'extension de mes fichiers donc la casse aussi.
Le problème n'est pas celui de la casse (drôle de traduction) qui est anecdotique.
Autant que je sache, casse n'est pas une traduction. Ou du moins, pas récente.
On trouve à plusieurs endroits sur Internet (par exemple : http://fr.wikipedia.org/wiki/Casse_%28typographie%29 ou http://www.deluxeavenue.com/typo_c.php) l'information que, du temps du plomb, les caractères étaient rangés dans des tiroirs ou des casiers : la casse. les caractères les plus fréquemment utilisés, les minuscules, étaient à portée de main, donc en « bas-de-casse », par opposition aux caractères majuscules qui se trouvaient donc relégués en haut de casse.
Bruno.
On Sat, 21 Apr 2007 17:22:32 +0200, matt wrote:
Sachant que c'est moi qui maitrise l'écriture, donc le nom et
l'extension de mes fichiers donc la casse aussi.
Le problème n'est pas celui de la casse (drôle de traduction) qui est
anecdotique.
Autant que je sache, casse n'est pas une traduction. Ou du moins, pas
récente.
On trouve à plusieurs endroits sur Internet (par exemple :
http://fr.wikipedia.org/wiki/Casse_%28typographie%29 ou
http://www.deluxeavenue.com/typo_c.php)
l'information que, du temps du plomb, les caractères étaient rangés dans
des tiroirs ou des casiers : la casse.
les caractères les plus fréquemment utilisés, les minuscules, étaient à
portée de main, donc en « bas-de-casse », par opposition aux caractères
majuscules qui se trouvaient donc relégués en haut de casse.
Sachant que c'est moi qui maitrise l'écriture, donc le nom et l'extension de mes fichiers donc la casse aussi.
Le problème n'est pas celui de la casse (drôle de traduction) qui est anecdotique.
Autant que je sache, casse n'est pas une traduction. Ou du moins, pas récente.
On trouve à plusieurs endroits sur Internet (par exemple : http://fr.wikipedia.org/wiki/Casse_%28typographie%29 ou http://www.deluxeavenue.com/typo_c.php) l'information que, du temps du plomb, les caractères étaient rangés dans des tiroirs ou des casiers : la casse. les caractères les plus fréquemment utilisés, les minuscules, étaient à portée de main, donc en « bas-de-casse », par opposition aux caractères majuscules qui se trouvaient donc relégués en haut de casse.
Bruno.
Harpo
On Sun, 22 Apr 2007 07:57:41 +0200, Bruno Piguet wrote:
Autant que je sache, casse n'est pas une traduction. Ou du moins, pas récente.
En effet, le Lexis donne : Casse : n. f.(it. cassa, caisse, lat. capsa; 1539)
On trouve à plusieurs endroits sur Internet (par exemple : http://fr.wikipedia.org/wiki/Casse_%28typographie%29 ou http://www.deluxeavenue.com/typo_c.php) l'information que, du temps du plomb, les caractères étaient rangés dans des tiroirs ou des casiers : la casse. les caractères les plus fréquemment utilisés, les minuscules, étaient à portée de main, donc en « bas-de-casse », par opposition aux caractères majuscules qui se trouvaient donc relégués en haut de casse.
Merci pour toutes ces précisions, il est toujours bon de connaître l'origine des mots que l'on utilise, maintenant j'utiliserai 'casse'.
On Sun, 22 Apr 2007 07:57:41 +0200, Bruno Piguet wrote:
Autant que je sache, casse n'est pas une traduction. Ou du moins, pas
récente.
En effet, le Lexis donne :
Casse : n. f.(it. cassa, caisse, lat. capsa; 1539)
On trouve à plusieurs endroits sur Internet (par exemple :
http://fr.wikipedia.org/wiki/Casse_%28typographie%29 ou
http://www.deluxeavenue.com/typo_c.php)
l'information que, du temps du plomb, les caractères étaient rangés dans
des tiroirs ou des casiers : la casse.
les caractères les plus fréquemment utilisés, les minuscules, étaient à
portée de main, donc en « bas-de-casse », par opposition aux caractères
majuscules qui se trouvaient donc relégués en haut de casse.
Merci pour toutes ces précisions, il est toujours bon de connaître
l'origine des mots que l'on utilise, maintenant j'utiliserai 'casse'.
On Sun, 22 Apr 2007 07:57:41 +0200, Bruno Piguet wrote:
Autant que je sache, casse n'est pas une traduction. Ou du moins, pas récente.
En effet, le Lexis donne : Casse : n. f.(it. cassa, caisse, lat. capsa; 1539)
On trouve à plusieurs endroits sur Internet (par exemple : http://fr.wikipedia.org/wiki/Casse_%28typographie%29 ou http://www.deluxeavenue.com/typo_c.php) l'information que, du temps du plomb, les caractères étaient rangés dans des tiroirs ou des casiers : la casse. les caractères les plus fréquemment utilisés, les minuscules, étaient à portée de main, donc en « bas-de-casse », par opposition aux caractères majuscules qui se trouvaient donc relégués en haut de casse.
Merci pour toutes ces précisions, il est toujours bon de connaître l'origine des mots que l'on utilise, maintenant j'utiliserai 'casse'.
Manque peut-être ici un test if(name == a->d_name) return 0;
car le fichier de nom ".txt" tout sec ne correspond probablement [ÀMHA] pas à tes critères de recherche.
if(strcmp(name, ".txt") == 0) return 1;
return 0; }
Par ailleurs, tu pourrais ajouter un commentaire dans un coin pour te souvenir que scandir() et alphasort() ne sont pas « standards » (absentes de la norme POSIX-2001/XPG6 ; c'est un héritage BSD4.3)
Antoine
Antoine
matt wrote:
Merci pour la reponse, voici donc la fonction qui me permet de filtrer
les "*.txt" :
Manque peut-être ici un test
if(name == a->d_name)
return 0;
car le fichier de nom ".txt" tout sec ne correspond probablement [ÀMHA] pas
à tes critères de recherche.
if(strcmp(name, ".txt") == 0)
return 1;
return 0;
}
Par ailleurs, tu pourrais ajouter un commentaire dans un coin pour te
souvenir que scandir() et alphasort() ne sont pas « standards » (absentes de
la norme POSIX-2001/XPG6 ; c'est un héritage BSD4.3)
Manque peut-être ici un test if(name == a->d_name) return 0;
car le fichier de nom ".txt" tout sec ne correspond probablement [ÀMHA] pas à tes critères de recherche.
if(strcmp(name, ".txt") == 0) return 1;
return 0; }
Par ailleurs, tu pourrais ajouter un commentaire dans un coin pour te souvenir que scandir() et alphasort() ne sont pas « standards » (absentes de la norme POSIX-2001/XPG6 ; c'est un héritage BSD4.3)
Antoine
Antoine
Antoine Leca
Xavier Roche wrote:
if (memcmp(name + len - 4, ".txt", 4)) return 1;
FOO.TXT ?
D'après le contexte, il est sur Unix. Si tu veux traiter ce problème, il faudrait alors récupérer les options de montage du volume courant (pour savoir si le système de fichiers distingue majuscule et minuscule, pardon capitale et bas-de-casse)...
Antoine
Xavier Roche wrote:
if (memcmp(name + len - 4, ".txt", 4)) return 1;
FOO.TXT ?
D'après le contexte, il est sur Unix. Si tu veux traiter ce problème, il
faudrait alors récupérer les options de montage du volume courant (pour
savoir si le système de fichiers distingue majuscule et minuscule, pardon
capitale et bas-de-casse)...
D'après le contexte, il est sur Unix. Si tu veux traiter ce problème, il faudrait alors récupérer les options de montage du volume courant (pour savoir si le système de fichiers distingue majuscule et minuscule, pardon capitale et bas-de-casse)...
Antoine
Antoine Leca
En news:462a2f22$0$27392$, Harpo va escriure:
Pour moi, si on écrit en C, avec toutes les douleurs que cela représente, c'est pour écrire des programme performants, même si les fonctions sous-jacentes sont bien écrites il faut éviter de scanner des chaînes de caractère, du moins pas plus qu'une fois.
Solution de Matt: strrchr()+strcmp() -> une lecture complète de la chaîne + 5 comparaisons de caractères
Solution de Harpo: strlen()+memcmp() -> une lecture complète de la chaîne + 4 comparaisons de caractères
Si on veut économiser une comparaison avec la solution de Matt, on peut écrire
if(strcmp(name+1, "txt") == 0)
mais franchement, le gain (s'il existe) est extrêmement marginal, et on perd largement en lisibilité ce que l'on peut gagner en rapidité.
Je sais que strrchr() est moins rapide que strlen(), mais la différence n'est pas de l'ordre de grandeur d'une lecture complète (surtout avec les processeurs modernes et leurs pipelines).
Antoine
En news:462a2f22$0$27392$ba4acef3@news.orange.fr,
Harpo <invalid@invalid.invalid> va escriure:
Pour moi, si on écrit en C, avec toutes les douleurs que cela
représente, c'est pour écrire des programme performants, même si les
fonctions sous-jacentes sont bien écrites il faut éviter de scanner
des chaînes de caractère, du moins pas plus qu'une fois.
Solution de Matt: strrchr()+strcmp() -> une lecture complète de la chaîne +
5 comparaisons de caractères
Solution de Harpo: strlen()+memcmp() -> une lecture complète de la chaîne +
4 comparaisons de caractères
Si on veut économiser une comparaison avec la solution de Matt, on peut
écrire
if(strcmp(name+1, "txt") == 0)
mais franchement, le gain (s'il existe) est extrêmement marginal, et on perd
largement en lisibilité ce que l'on peut gagner en rapidité.
Je sais que strrchr() est moins rapide que strlen(), mais la différence
n'est pas de l'ordre de grandeur d'une lecture complète (surtout avec les
processeurs modernes et leurs pipelines).
Pour moi, si on écrit en C, avec toutes les douleurs que cela représente, c'est pour écrire des programme performants, même si les fonctions sous-jacentes sont bien écrites il faut éviter de scanner des chaînes de caractère, du moins pas plus qu'une fois.
Solution de Matt: strrchr()+strcmp() -> une lecture complète de la chaîne + 5 comparaisons de caractères
Solution de Harpo: strlen()+memcmp() -> une lecture complète de la chaîne + 4 comparaisons de caractères
Si on veut économiser une comparaison avec la solution de Matt, on peut écrire
if(strcmp(name+1, "txt") == 0)
mais franchement, le gain (s'il existe) est extrêmement marginal, et on perd largement en lisibilité ce que l'on peut gagner en rapidité.
Je sais que strrchr() est moins rapide que strlen(), mais la différence n'est pas de l'ordre de grandeur d'une lecture complète (surtout avec les processeurs modernes et leurs pipelines).
Antoine
Antoine Leca
En news:f0d6a5$2vp$, Xavier Roche va escriure:
Merci pour la reponse, voici donc la fonction qui me permet de filtrer les "*.txt" : char *name = strrchr(a->d_name, '.'); (..)