IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Perl Discussion :

Invalid top directory at. . .


Sujet :

Langage Perl

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2011
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Invalid top directory at. . .
    Bonjour à toutes et tous.

    Je suis chargé de réaliser un script qui supprime des fichiers jugés indésirables sur les répertoires de certaines personnes.
    Etant mauvais en programmation (il ne faut pas se voiler la face) j'en suis arrivé à ma version 4 du script.
    Les 3 premières étaient des morceaux raccommodés avec du scotch (qui fonctionnait) mais n'était pas "propre".

    J'ai donc recommencé et donné un "squelette" plus conforme.

    Les étapes de mon script sont les suivantes :
    Je recherche tous les fichiers de mon répertoire et je les listes.
    Cette liste est envoyé à différents tests qui vérifient que les fichies sont soient vide / inconformes / doublons, en créant de nouvelles listes correspondantes.
    Toutes ces listes sont rassemblées ensuite afin de créer un fichier texte de suivi et sont ensuites supprimés.
    (J'espère avoir été compris car j'ai beaucoup de mal à m'expliquer ><)

    Tout cela est bien joli, mais le soucis c'est que depuis que j'ai recommencé ce squelette, impossible ed compiler.
    Comme l'indique mon intitulé de Topic, j'ai le message d'erreur suivant :

    "invalid top directory at usr/lib/perl5/5.12.2/File/Find.pm line 598"

    Je vous donne mon code complet pour gagner du temps en compréhension...
    J'ai rajouté use diagnostics; au début, après avoir été sur le site des mongueurs de Perl... Vous aurez des informations complémentaires (impossible de les copier / coller avec mon IDE (Padre) )

    D'après mes recherches et de ma compréhension du message d'erreur (ATTENTION JE ME TROMPE TRES CERTAINEMENT)
    Cela peut venir :
    -d'un undef mal défini dans une boucle
    -de l'utilisation d'un mauvais répertoire
    -d'un tableau mal initialisé & utilisé
    -Perl 5.12.2 ne soutient pas le script

    Toutes ces pistes ne sont que des retours que j'ai à peu près compris (je rappel que je ne suis pas bon en prog' et que je m'excuse de ne vous apporter que des "bouts" de réponse).

    Je link mon script qui je l'espère sera plus parlant que mes explications.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
     
     
    #!/usr/bin/perl 
    # Shebang perl
     
    # use warnings = vérification de la syntaxe
    # use strict = obligation de déclarer les variables
    # use File::Find est un module Perl qui permet de parcourir récursivement tous les fichiers et d'appliquer des traitements dessus
     
    use warnings;
    use strict;
    use File::Find;
    use diagnostics;
     
    #Exécution du programme
    &main();
     
     
    #Fonction principale
    sub main 
    {
     
    	#La fonction principale appelle toutes les fonctions une par une
     
        #Répertoire que l'on veut contrôler
        my $repertoire = '/home/NMalo/Temp'; ###### NOTE POUR PLUS TARD : Envoyer le répertoire en paramètre à l'appli
    	my @blackList = ();
     
    	#Recherche des fichiers et récupération sous forme de tableau
    	my @fichiersAControler = &recherche($repertoire);
     
    	#Premier test, on vérifie les fichiers qui sont vides
    	my @tempList = &testVide(@fichiersAControler);
    	@blackList = &copyBlackList(@tempList, @blackList); #On ajoute à la Black List
    	undef @tempList; #On détruit la liste temporaire
     
    	print "Hello Worold\n"; #CECI SERT DE TEST
     
    	print "$blackList[0]\n";
     
    	#Second test, on vérifie les fichiers non conformes
    	@tempList = &testInconforme(@fichiersAControler); #On ajoute à la Black List
    	@blackList = &copyBlackList(@tempList, @blackList);
    	undef @tempList;
     
    	#Dernier test, on vérifie les doublons
    	@tempList = &testDoublon(@fichiersAControler);
    	@blackList = &copyBlackList(@tempList, @blackList);
    	undef @tempList;
     
     
    	#On supprime la Black List et écrit le reporting dans un fichier
    	&execBlackList(@blackList);
     
    }
     
     
     
    				#
    				#
    				#
     
    #Fonction de récupération de la liste des fichiers
    sub recherche 
    {
     
    my @fichiers = find( \&currentFile, $_);
     
     
    return @fichiers;
     
    }
     
    				#
    				#
    				#
     
    #Fonction pour récupérer le fichier courant
    sub currentFile 
    {
     
    	if ( -f $File::Find::name ) 
    	{
    		#On retourne le chemin vers le fichier
    		return $File::Find::name;
    	}
     
    }
     
    				#
    				#
    				#
     
    #Fonction de suppression des fichiers vides
    sub testVide 
    {
     
    	#On parcourt l'ensemble des fichiers de la liste
    	foreach my $fichier_rep (@_)
    	{
    		#Si taille fichier = 0 Ko -> on ajoute à la liste à supprimer
    		push my @fichier_vide, "$File::Find::name" if -z;
    	}
     
    #On renvoie la liste des fichiers vides
    return my @fichier_vide;
     
    }
     
    				#
    				#
    				#
     
    #Fonction de suppression des fichiers inconformes
    sub testInconforme 
    {
    	foreach my $fichier_rep (@_)
    	{
    		push my @fic_inconforme, $File::Find::name  if   ( m/\.(\w*_\w*|3ds|ace|aif|aiff|aifc|ani|avi|bak|bmp|c|cda|cdf|cdr|cgi|cgm|chk|com|cpe|cpl|cue|cur|dvit|dib|
    																divx|diz|drw|dwg|dxf|ecd|eps|eqn|exe|fif|flc|fli|fon|for|fot|grp|hlp|icc|ico|icm|idf|iff|iges|
    																ilbm|lha|lbm|m|m3u|max|mid|mkv|mod|mov|mp2|mp3|mpg|n64|ocx|p|pcd|pct|pcx|pdf|pic|pif|pls|prj|
    																psp|pub|pwl|qt|ra|ram|reg|scr|snd|swf|tga|theme|tif|tiff|tmp|torrent|ttf|uu|uue|vbs|vivo|voc|
    																vtc|vue|wav|wiz|wmf|wmv|wpg|wri|xi|xls|xm)$/ )  
    													|  ( m/^[a-z|0-9]/ )  
    													|  ( m/[' ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØŒŠþÙÚÛÜÝŸàáâãäåæçèéêëìíîïðñòóôõöøœšÞùúûüýÿ¢ß¥£™©®ª×÷±²³¼½¾µ¿¶·¸º°¯§…¤¦‡¬ˆ¨‰]/ ) 
    	}
    return my @fic_inconforme;
    }
     
    				#
    				#
    				#
     
    #Fonction de suppression des doublons
    sub testDoublon 
    {
    # A COMPLETER
    }
     
    				#
    				#
    				#
     
    #Fonction de création BlackList
    sub execBlackList 
    {
    # A COMPLETER
    }
     
    				#
    				#
    				#
     
    #Fonction de copie de fichiers dans la BlackList
    sub copyBlackList 
    {
     
    #Récupération des pointeurs de tableaux
    my $t_temp = $_[0];
    my $t_BL = $_[1];
     
    	#On parcourt le tableau temporaire
    	foreach my $temp (@$t_temp)
    		{
     
    		#Booléen indiquant si le fichier a déjà été black listé
    		my $bool = 0;
     
    		#On parcourt le tableau de BlackList existante pour comparer
    		foreach my $BL (@$t_BL)
    			{
     
    				#Si le fichier a déjà été black listé, on switch le booléen et on quitte la boucle
    				if(my $temp == my $BL)
    				{
     
    					my $bool = 1;
    					last;
     
    				}	
     
     		}
     
    		#Si le fichier n'a pas été black listé, on l'ajoute à la BL
    		push (@$t_BL, $temp) if($bool == 0);
     
    		}
     
     
    }

    Je pense que l'indentation va sauter en vous le proposant via le forum mais que j'espère vous parviendrez à vous y retrouvez.

    Je vous remercie par avance de votre aide.


    PS : Un troisième test (il y en a d'autres encore, mais en particulier celui-ci) est de supprimer les fichiers en double dans l'arborescence testée en comparant leurs sha1.
    A la base je ne souhaitait pas les comparer avec leurs sha1 mais même sans, j'ai beaucoup de mal...
    Je vous donne la réflexion :
    -Prendre une liste de fichiers avec leurs chemins en entrée
    -Prendre le premier élément, le tester avec tous les autres, dès la première occurence -> tester, placer dans une liste & supprimer le fichier le plus récent
    -Continuer jusqu'à la fin
    -Faire de même avec les éléments suivants


    Je vous remercie encore par avance et si vous avez besoin de plus de renseignements, n'hésitez pas à me le communiquer. Merci.

  2. #2
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    Bonjour,

    Bon, il y a pas mal d'erreurs dans ce programme, je vais prendre 5 minutes pour le corriger et je vous le mets. Vous prendrez ensuite le temps de le comprendre et poser des questions si nécessaire.

  3. #3
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    Voici un ton programme refait, tu peux le tester et y apporter tes modifications.
    Je te conseils néanmoins d'essayer de le comprendre. Tu as la FAQ qui pourra t'aider sur les références.
    Bon courage !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    #!/usr/bin/perl 
    # Shebang perl
     
    # use warnings = vérification de la syntaxe
    # use strict = obligation de déclarer les variables
    # use File::Find est un module Perl qui permet de parcourir récursivement tous les fichiers et d'appliquer des traitements dessus
     
    use warnings;
    use strict;
    use Carp;
    use File::Find;
     
    #Exécution du programme
     
    ###### NOTE POUR PLUS TARD : Envoyer le répertoire en paramètre à l'appli
    my $repertoire_a_controller = '/home/NMalo/Temp';
    main($repertoire_a_controller);
     
    # Fonction principale
    # La fonction principale appelle toutes les fonctions une par une
    sub main {
      my ($repertoire) = @_;
     
      my @blackList = ();
     
      # Recherche des fichiers et récupération sous forme de tableau
      my @fichiersAControler = recherche($repertoire);
     
      # Récupération des fichiers vides
      my @tempList = grep { -z $_ } @fichiersAControler;
     
      # copie de @tempList dans @blackList
      copyBlackList( \@blackList, \@tempList );
      @tempList = ();
     
      #Second test, on vérifie les fichiers non conformes
      @tempList = testInconforme( \@fichiersAControler );
      copyBlackList( \@blackList, \@tempList );
      @tempList = ();
     
      # On supprime les doublons de la liste des fichiers de la blacklist
      @blackList = supprime_doublon( \@blackList );
     
      # On supprime les fichiers blackister et écrit le reporting dans un fichier
      execBlackList(@blackList);
      return;
    }
     
    #
    #
    #
     
    #Fonction de récupération de la liste des fichiers
    sub recherche {
      my ($repertoire) = @_;
      my @fichiers;
     
      # Si le répertoire n'existe pas
      if ( !-e $repertoire ) {
        croak "Repertoire inexistant : $repertoire\n";
      }
     
      # Récupération des fichiers
      find(
        sub {
          if ( -f $File::Find::name ) { push @fichiers, $File::Find::name; }
        },
        $repertoire
      );
      return @fichiers;
    }
     
    # Fonction de suppression des fichiers inconformes
    sub testInconforme {
      my $ref_fichiers = shift;
     
      my @fichiers_inconformes;
      my @extensions_fichiers_interdits = qw /
        3ds ace aif aiff aifc ani avi bak bmp c cda cdf cdr cgi cgm chk com cpe cpl cue cur dvit dib
        divx diz drw dwg dxf ecd eps eqn exe fif flc fli fon for fot grp hlp icc ico icm idf iff iges
        ilbm lha lbm m m3u max mid mkv mod mov mp2 mp3 mpg n64 ocx p pcd pct pcx pdf pic pif pls prj
        psp pub pwl qt ra ram reg scr snd swf tga theme tif tiff tmp torrent ttf uu uue vbs vivo voc
        vtc vue wav wiz wmf wmv wpg wri xi xls xm
        /;
      my $motif_fichiers = join '|', @extensions_fichiers_interdits;
     
      # Si le fichier se termine par cette extension, il est inconforme
      foreach my $fichier ( @{$ref_fichiers} ) {
        if (
          ( $fichier =~ m{\.(?:$motif_fichiers)$}i )
          || ( $fichier
            =~ m{[\'ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØŒŠþÙÚÛÜÝŸàáâãäåæçèéêëìíîïðñòóôõöøœšÞùúûüýÿ¢ß¥£™©®ª×÷±²³¼½¾µ¿¶·¸º°¯§…¤¦‡¬ˆ¨‰]}
          )
          )
        {
          push @fichiers_inconformes, $fichier;
        }
      }
     
      return @fichiers_inconformes;
    }
     
    # Fonction de suppression des doublons
    sub supprime_doublon {
      my ($ref_tabeau) = @_;
     
      return keys %{ { map { $_ => 1 } @{$ref_tabeau} } };
    }
     
    # Fonction de création BlackList
    sub execBlackList {
      my @fichiers = @_;
     
      print "Files to delete\n";
      foreach my $fichier (@fichiers) {
        print "- $fichier\n";
      }
    }
     
    #
    #
    #
     
    # Fonction de copie de fichiers dans la BlackList
    sub copyBlackList {
      my ( $ref_blacklist, $ref_liste ) = @_;
     
      foreach my $fichier ( @{$ref_liste} ) {
        push @{$ref_blacklist}, $fichier;
      }
     
      return;
    }

  4. #4
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2011
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Merci
    Bonjour Djibril,

    Désolé de ne répondre que maintenant, je n'ai pas pu avant, bref...
    Merci beaucoup pour ton aide, je regarde le script en essayant de le comprendre complètement, je te fais un retour dès que possible.
    En tous cas il compile, donc merci !

    Je me permets de laisser ce topic ouvert le temps que je le comprenne complètement, au cas ou j'ai une question.

    Très cordialement.

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2011
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Détails
    Bonjour Djibril, bonjour à toutes & tous,

    Tout d'abord encore merci de votre aide, sans vous je n'aurais pu avancer autant.

    Je reviens vers vous (après un temps plutôt important...) car je ne parviens pas à trouver mon erreur.

    J'ai récupéré ton précédent code (et je t'en remercie encore).

    Celui-ci me supprimait très bien les fichiers vides, mais ne prenait pas en compte les tests suivants (les Regex ainsi que les doublons).

    J'ai donc repris ma partie de Regex qui fonctionnait comme je souhaitais sur un script précédent, mais j'atteind malheureusement le même résultat.

    J'ai un jeu de tests constitué de plusieurs fichiers différents (nommages différents, fichiers vides, extensions non accordées, non conformes, etc...)

    Tu me conseillais de suivre la FAQ sur les références, je l'ai fais mais ne trouve pas mon erreur.

    Mon code compile parfaitement, je n'ai plus aucune erreur (malgré strict, warnings, diagnostics, etc...) mais ne prend toujours pas en compte les regex et le test de doublons comme souhaité.

    Je pense qu'après le grep (pour les fichiers vides) le code saute le reste, mais pas moyen de trouver ou l'erreur se trouve. En isloant différentes parties du code, en le commentant, en testant avec des print, etc, etc...

    Je me permets donc de revenir vers vous.
    Mon stage se termine cette semaine (et heureusement *tousse*) mais je tiens tout de même à finaliser mon travail.

    En vous remerciant et en restant à votre disposition pour toute information supplémentaire.

    PS : J'ai commenté au maximum mon code, mais ceux ci peuvent malheureusement... être faux parfois, donc ne vous y fiez pas de trop.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
     
    #!/usr/bin/perl 
    # Shebang perl
     
    # use warnings = vérification de la syntaxe
    # use strict = obligation de déclarer les variables
    # use Carp = alternative à warn & die pour les modules (utilisation de croak)
    # use File::Find est un module Perl qui permet de parcourir récursivement tous les fichiers et d'appliquer des traitements dessus
    # use diagnostics permet d'avoir des informations supplémentaires et plus précises sur les erreurs de compilation
     
    use warnings;
    use strict;
    use Carp;
    use File::Find;
    use diagnostics;
     
    #Exécution du programme
     
    ###### NOTE POUR PLUS TARD : Envoyer le répertoire en paramètre au script
    my $repertoire_a_controler = '/home/NMalo/Temp';
     
    main($repertoire_a_controler);
     
    # Fonction principale
    # La fonction principale appelle toutes les fonctions une par une
    sub main 
    {
     
      my ($repertoire) = @_;
     
      my @blackList = ();
      my @fichiers = ();
     
      # Recherche des fichiers et récupération sous forme de tableau
      # Entrée = Rien
      # Sortie = Tableau @fichiers avec les chemins et noms de chaque fichier
      my @fichiersAControler = recherche($repertoire);
     
      # Récupération des fichiers vides
      # grep -z = Recherche des fichiers existants mais vides
      # Entrée = @fichiersAControler
      # Sortie = @tempList
      my @tempList = grep { -z $_ } @fichiersAControler;
     
      # copie de @tempList dans @blackList
      # Entrée = @blackList vide et @tempList = fichiers vides
      # Sortie = @blackList(fichiers vides) & @tempList réinitialisé
      copyBlackList( \@blackList, \@tempList );      
      @tempList = ();
     
      #Second test, on vérifie les fichiers non conformes
      # Entrée = $ref_fichiers
      # Sortie = @tempList en tableau des fichiers non conformes aux conventions de nommage @fichiers_inconformes
      @tempList = testInconforme( \@fichiersAControler );          
     
      # copie de @tempList dans @blackList
      # Entrée = @blacklist vide & @tempList = @fichiers_inconformes
      # Sortie = @blacklist(fichiers vides + fichiers inconformes) & @tempList réinitialisé
      copyBlackList( \@blackList, \@tempList );     
      @tempList = ();
     
      # On supprime les doublons de la liste des fichiers de la blacklist
      # Entrée = Tableau @blackList 
      # Sortie = Feedback
      @blackList = supprime_doublon( \@blackList );
     
      # On supprime les fichiers blackistés et on écrit le reporting dans un fichier
      execBlackList(@blackList);
      return;
     
    }
     
    ####################################### [RECHERCHE] #####################################################
     
    # Fonction de récupération de la liste des fichiers
    sub recherche 
    {
      my ($repertoire) = @_;
      my @fichiers = ();
     
      # Si le répertoire n'existe pas, feedback
      if ( !-e $repertoire ) 
      {
        croak "Répertoire inexistant : $repertoire\n";
      }
     
      # Récupération des fichiers (-f = si le fichier existe)
      find
      (
        sub                                                                                 
        {
          if ( -f $File::Find::name ) { push @fichiers, $File::Find::name; }
        },
     
        $repertoire                                                                         
      );
     
      return @fichiers;
    }
     
     
    ####################################### [TESTS] ########################################################
     
     
    # Fonction de suppression des fichiers inconformes
    sub testInconforme 
    {
      my $ref_fichiers = shift;            
     
      my @fichiers_inconformes = ();
     
      # Regex
      foreach my $fichier ( @{$ref_fichiers} ) 
      {
        if 
        (  
      #m indique que l'on veut faire un match
      #choix du séparateur /, m n'est pas obligatoire pour faire des matchs, mais gardé par sécurité suivant les versions & modules de Perl
     
            # Si le fichier se termine par cette extension, il est inconforme et est envoyé dans la liste @fichiers_inconformes
            ( $fichier =~ m/\.(\w*_\w*|3ds|ace|aif|aiff|aifc|ani|avi|bak|bmp|c|cda|cdf|cdr|cgi|cgm|chk|com|cpe|cpl|cue|cur|dvit|dib|
    																divx|diz|drw|dwg|dxf|ecd|eps|eqn|exe|fif|flc|fli|fon|for|fot|grp|hlp|icc|ico|icm|idf|iff|iges|
    																ilbm|lha|lbm|m|m3u|max|mid|mkv|mod|mov|mp2|mp3|mpg|n64|ocx|p|pcd|pct|pcx|pdf|pic|pif|pls|prj|
    																psp|pub|pwl|qt|ra|ram|reg|scr|snd|swf|tga|theme|tif|tiff|tmp|torrent|ttf|uu|uue|vbs|vivo|voc|
    																vtc|vue|wav|wiz|wmf|wmv|wpg|wri|xi|xls|xm)$/ )
    		# Si le fichier commence par une minuscule ou un chiffre, il est inconforme et est envoyé dans la liste @fichiers_inconformes
        ||  ( $fichier =~ m/^[a-z|0-9]/ )
            # Si le fichier contient des espaces, des accents ou des symbôles inappropriés, il est inconforme et est envoyé dans la liste @fichiers_inconformes
        ||  ( $fichier =~ m/['\sÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØŒŠþÙÚÛÜÝŸàáâãäåæçèéêëìíîïðñòóôõöøœšÞùúûüýÿ¢ß¥£™©®ª×÷±²³¼½¾µ¿¶·¸º°¯§…¤¦‡¬ˆ¨‰]/ )  
        )
     
        {
          push @fichiers_inconformes, $fichier;
        }                                           
     
     
      return @fichiers_inconformes;
      }
    }
     
     
    # Fonction de suppression des doublons
    sub supprime_doublon 
    {
      my ($ref_tabeau) = @_;
     
      return keys %{ { map { $_ => 1 } @{$ref_tabeau} } };
     
    }
     
     
     
    # Fonction de création BlackList
    # Entrée = @blackList
    # Sortie = Feedback des fichiers à supprimer
    sub execBlackList 
    {
      my @fichiers = @_;
     
      print "Les fichiers supprimés sont les suivants :\n";
     
      foreach my $fichier (@fichiers) 
      {
        unlink($fichier);        
     
        print "- $fichier\n";
     
      }
     
    }
     
    #             ----
    #             PUSH POUR COPYBLACKLIST
    #             ----
     
    # Fonction de copie de fichiers dans la BlackList
    # Entrée = @tempList
    # Sortie = @blackListcopyBlackList
    sub copyBlackList 
    {
      my ( $ref_blacklist, $ref_liste ) = @_;
     
      foreach my $fichier ( @{$ref_liste} ) 
      {
        push @{$ref_blacklist}, $fichier;
      }
     
      return;
    }
    Bonne continuation à tous, encore merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 13/01/2015, 15h14
  2. Réponses: 1
    Dernier message: 22/08/2014, 23h25
  3. ASM + DELPHI ... soucis ... mais top intéressant !
    Par - Robby - dans le forum Langage
    Réponses: 9
    Dernier message: 21/11/2003, 15h58
  4. [File et Directory ListBox] Soucis de filtre
    Par Mercilius dans le forum Composants VCL
    Réponses: 8
    Dernier message: 04/04/2003, 16h17
  5. [XMLRAD] invalid character type
    Par Sylvain James dans le forum XMLRAD
    Réponses: 4
    Dernier message: 10/12/2002, 07h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo