• # C

    Posté par . En réponse au message traitement selon le nom du fichier. Évalué à 1.

    #include <stdio.h>
    #include <stdlib.h>
    #include <sys/types.h>
    #include <dirent.h>
    int main(int argc, char **argv) {
     struct dirent* entry;
     DIR* directory;
     char* file;
     int length;
     if(directory = opendir(".")) {
     while(entry = readdir(directory)) {
     printf("%s\t\t", (file=entry->d_name));
     length = strlen(file);
     if(length==12 && !strncmp(file,"FFF_",4) && 
    	 !strncmp(&file[length-4],"_tmp", 4) &&
    	 !( *(file+length-4)=0 ) &&
    	 (atoi(&file[4]) || !( *(file+length-4)='_' ))) {
    	// traitement sur le fichier ici ...
    	printf("OK\n");
     } else {
    	printf("BAD\n");
     }
     }
     closedir(directory);
     }
     
     return 0;
    }
    
    Quelques explications (si nécessaires):
    • en C y'a pas vraiment de booléens, juste 0 pour false et tout le reste pour true
    • toute affectation "retourne" une valeur, celle qui a été affectée à la variable à gauche de l'expression, ainsi (i=6) vaut 6, ce qui autorise a=(b=6) pour donner a=6 et b=6
    • l'expression suivant un && n'est évaluée que si l'expression située avant est true (!= 0)
    • l'expression suivant un || est évaluée quelque soit la valeur de l'expression située avant
    Ainsi: !( *(file+length-4)=0 ) remplace le dernier '_' par '0円' et renvoie !0 donc true, atoi(&file[4]) renvoie true uniquement si la séquence est un chiffre non nul, et !( *(file+length-4)='_' ) remet en place le '_' en renvoyant false pour ne pas interférer dans le résultat de atoi(). A+, Jay