• [^] # Re: perlmonks says

    Posté par . En réponse au message faire fonctioner Code sur plusieurs Fichiers se trouvant tous dans un dossier. Évalué à 1.

    Bon je viens de capter que tu es sous Windows.
    Je pense que la suggestion de fearan sur faire ton truc en powershell est pertinente (no troll, powershell est vraiment pas mal).
    Cela dit, il semble que tu aies déjà du code en perl, et de toute façon, on est pas sur DLFP pour pousser les gens à dev en .ps.

    Erratum sur le précédent commentaire: ajoutes -type f:

    find2perl /home/henry/xmlfolder/ -type f -name "*.xml" > lasolutionamonprobleme.pl

    En gros tu as :

    use strict;
    use File::Find ();
    # Set the variable $File::Find::dont_use_nlink if you're using AFS,
    # since AFS cheats.
    # for the convenience of &wanted calls, including -eval statements:
    use vars qw/*name *dir *prune/;
    *name = *File::Find::name;
    *dir = *File::Find::dir;
    *prune = *File::Find::prune;
    sub wanted;
    # Traverse desired filesystems
    File::Find::find({wanted => \&wanted}, '/home/henry/xmlfolder/');
    exit;
    sub wanted {
     my ($dev,$ino,$mode,$nlink,$uid,$gid);
     (($dev,$ino,$mode,$nlink,$uid,$gid) = lstat($_)) &&
     -f _ &&
     /^.*\.xml\z/s
     && print("$name\n");
    }
    

    Tu crées une belle fonction processXML :

    sub processXML ($) {
     print $_."\n";
    }
    

    et tu remplaces la fonction wanted par:

    sub wanted {
     my ($dev,$ino,$mode,$nlink,$uid,$gid);
     (($dev,$ino,$mode,$nlink,$uid,$gid) = lstat($_)) &&
     -f _ &&
     /^.*\.xml\z/s
     && processXML($name);
    }
    

    C'est en récursif, je n'ai pas cherché comment désactiver la récursivité.

    Pour mettre le path de recherche des fichiers xml en argument de lasolutionamonprobleme.pl, réfères toi à l'article des mongueurs sus-mentionné.

    P.S.1.: La solution est présentée comme telle pour plus de clarté, mais tu peux évidemment faire ton traitement xml dans la fonction wanted.

    P.S.2. : [à prendre avec des pincettes] Ton affirmation sur "tous les fichiers donc les noms commence par d et t" a l'air incorrecte, il s'agirait en fait de tous les fichiers ou dossiers contenants un d ou un t (ainsi que tous les enfants si il s'agit d'un dossier) et ce de manière récursive?
    par exemple, ca retourne ca sur mon ~:
    Found it /home/warwick/.icedove/dhi10c6d.default/extensions/rikaichan-jpfr@polarcloud.com/chrome/rikaichan-jpfr.jar

    J'utilise une syntaxe PCRE pour mes regex et je suis un peu paumé avec ton exemple. Chez moi, la syntaxe suivante fonctionne:
    /^[d|t].*\z/si (le i pour conserver ton case insensitive).

    P.S.3.: Tu n'as pas fermé ton filehandle dans le bout de code que tu donnes.
    https://en.wikipedia.org/wiki/Handle_leak

    P.S.4.: Tu codes avec le compte admin ?

    P.S.Vita.: Non, je ne fais aucunement de la pub à Sony.

    P.S.CoinCoin.: J'espère que j'ai pas passe une partie de ma soirée après 12h au taff pour ne pas répondre à ta question...