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 :

Traiter des fichiers à la chaîne dans un répertoire


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 6
    Par défaut Traiter des fichiers à la chaîne dans un répertoire
    Bonjour,

    Je suis débutant en Perl et j'ai l'impression d'être confronté à un problème simple pour tout le monde, mais que je n'arrive pourtant pas à détordre ; aussi j'espère que vous aurez cinq petites minutes pour m'expliquer ce qui ne va pas dans ma démarche.

    En gros, je cherche à appliquer un ensemble de traitements à un ensemble de fichiers contenus dans un seul répertoire.

    Ces traitements se résument (pour le moment) en deux subroutines simples qui permettent l'identification de la plus grosse font-size d'un document HTML et d'en ramener une portion de texte utile (le titre du document, le postulat étant que les plus gros caractères sont dans le titre).
    Ces subroutines fonctionnent très bien sur les fichiers que j'ai testé et j'ai donc souhaité les appliquer successivement à ces mêmes fichiers contenus dans un répertoire unique.

    Mon intention était d'utiliser un glob pour identifier les fichiers et leurs chemins d'accès, ce qui a l'air de fonctionner, mais leur ouverture par la suite semble poser problème - j'ai des résultats intranscriptibles sur mon premier fichier (il semble donc bien être lu), juste leur nom pour les autres.
    J'ai cherché partout (FAQ, cours, etc) pour en savoir plus sur le maniement du glob (j'ai aussi essayé avec opendir et readdir, pour tomber sur les mêmes résultats) et je ne trouve pas de solution à mon problème, depuis une semaine que je suis dessus. J'espère que vous pourrez m'aider, en pardonnant les erreurs éventuellement grossières du débutant que je suis.

    Voici le code (nb : tout ça est censé tourner sous Windows) :
    Code perl : 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
     
    $max=0;
    $SOURCE = "C:/toto/pouet/atraiter/*.htm";
     
    #lire et stocker le nom des fichiers 
     foreach (glob ($SOURCE)) {
     push(@listfic, $_);
    }
     
    #pour chaque fichier retrouvé, lancer l'exécution des subroutines
    foreach $entree (@listfic) {
    print "$entree\n";
    max();
    titre();
    }
     
    #identifier les font-size
    sub max {
    open IN,"< $entree" or die "On cherche encore, ce fichier n'existe po...\n";
    while(<IN>) {
       chomp; 
       if (/font-size[\D]*${max}[^>]+>([^<]+)/) {
    	print "$1\n";
    	}
    	if ($1>$max){
    	$max=$1;
    	}
    }
     
    close IN;
    }
     
    #extraire le titre, avec un peu de slurping pour ne pas s'encombrer des retours à la ligne
    sub titre {
    local ($/, *IN);
    open IN,"< $entree" or die "On cherche encore, ce fichier n'existe pas...\n";
    while(<IN>){
    	chomp;
    	if (/font-size: $max\D\D\W\W.*;\W\W([^<]+)/){
    	print "$1\n";
    	}
    }
     
     
    close IN;
    }

  2. #2
    Membre confirmé
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2009
    Messages
    212
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2009
    Messages : 212
    Par défaut
    salut,

    Perso je ne vois pas ce qui cloche dans ton script, je ne suis pas une experte mais plus une débutante ^^' surtout que je ne connais la fonction glob (j'irais jeter un coup d'oeil au passage)

    Toutefois j'ai eu à faire la même chose que toi et en cherchant sur le net j'étais tombé sur ce script (d'ailleur surment sur ce forum)

    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
     
    #/usr/bin/perl
     
    use strict;
    use warnings;
    use Cwd;
     
    my $dossier_courant= getcwd();#donne le chemin courant
     
    my $Repertoire = "$dossier_courant/$nom_repertoire";
    my @LesFichiers = ListersFichiers($Repertoire);
     
    sub ListersFichiers {
      my ( $repertoire ) = @_;
      my @fichiers;
     
      # Ouverture d'un répertoire
      opendir (my $FhRep, $repertoire) 
        or die "impossible d'ouvrir le répertoire $repertoire\n";
     
      # Liste fichiers et répertoire sauf (. et ..)
      my @Contenu = grep { !/^\.\.?$/ } readdir($FhRep);
     
      # Fermeture du répertoire
      closedir ($FhRep);
     
      # On récupère tous les fichiers
      foreach my $nom ( @Contenu ) {
        # Fichiers
        if ( -f "$repertoire/$nom") {
          push ( @fichiers, "$repertoire/$nom" );  
        }
        # Repertoires
        elsif ( -d "$repertoire/$nom") {
          # recursivité
          push ( @fichiers, ListersFichiers("$repertoire/$nom") );
        }
      }
     
      return @fichiers;
    }
    Je ne sais pas si tout ceci t'aide mais j'ai rien de mieux en réserve Si tu as des question hésite pas

  3. #3
    Membre expérimenté
    Homme Profil pro
    Gérant infopsylon
    Inscrit en
    Juin 2010
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Gérant infopsylon
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2010
    Messages : 215
    Par défaut
    Marlann,

    Je crois aussi que tu devrais t'orienter vers la solution d'angioedema, ca ne réglera peut-être pas ton problème, mais ca aura le mérite d'être un peu plus clean.
    Il y a beaucoups d'erreurs d'écriture dans ton script. A commencé par l'usage des variables, $entree, est globale, utilisée dans une boucle qui fait appel à une fonction, qui elle, l'utilisera... Soit tu places ta variable en locale, soit tu fait ton traitement dans ta boucle, au choix... Bref....

    Tu devrais vérifier l'encodage de tes fichiers HTML, UTF-8 ? ASCII ? UTF-16 ..., et aussi dans quel mode est ton script.

    Souvent, le fait d'avoir des caractères illisibles vient de ca.

    Cdlt,
    Lilian.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 6
    Par défaut
    Merci Angioedema, je vais voir ce que je peux faire avec ça . Ceci dit, ça ressemble très fort à la syntaxe du readdir que j'avais utilisée alternativement au glob, qui avait donné le même résultat.

    Merci aussi lilian_h, en ce qui concerne l'encodage j'avais fait attention au problème, ce n'en est pas l'origine ; pour ce qui est des variables globales, je pensais que justement leur intérêt était de pouvoir les utiliser partout. Quant au mode de script, j'avoue que là je ne vois pas de quoi tu parles . Je vais me renseigner...

    Je repasserai pour indiquer si j'ai eu le fin mot de l'affaire avec vos conseils.

  5. #5
    Membre expérimenté
    Homme Profil pro
    Gérant infopsylon
    Inscrit en
    Juin 2010
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Gérant infopsylon
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2010
    Messages : 215
    Par défaut
    Si toute fois il s'agit d'un problème d'encodage, je t'invite à lire une réponse de Jedai sur ce post:

    http://www.developpez.net/forums/d37...obleme-locale/

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 6
    Par défaut
    Merci pour le thread lilian_h, j'y ai appris des trucs. Pour ma part, je me réfère à "Perl pour les linguistes" de L. Tanguy et N. Hathout chez Hermès-Lavoisier pour les problèmes d'encodage, c'est bien expliqué et assez exhaustif (pour des problématiques comme les miennes).

    Mais je crois définitivement que ce n'est pas ça mon problème.

    En fait, mes sub max et titre tournent bien (et donnent des résultats lisibles), sur un fichier pris isolément.
    De même, je peux trouver mes noms de fichier dans un répertoire (via un glob ou un readdir comme dans la solution d'angioedema).

    C'est quand j'essaie de faire tourner successivement mes sub sur chaque élément de la liste de fichiers que j'obtiens des résultats partiels (relatifs au premier ficihier de la liste) et imbitables.

    D'où je me suis dit que le problème de variables locales ou pas pourrait bien être celui qui pose problème, mais après essais, ça ne change strictement rien. Je reste donc dans le flou comme avant...

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

Discussions similaires

  1. [AC-2002] Boucle pour importer et traiter des fichiers excel dans un dossier
    Par Tinien dans le forum VBA Access
    Réponses: 9
    Dernier message: 02/06/2010, 11h59
  2. Traiter des fichiers un a un
    Par Paloma dans le forum VB 6 et antérieur
    Réponses: 12
    Dernier message: 02/11/2006, 10h47
  3. Réponses: 7
    Dernier message: 15/06/2006, 17h36
  4. [Eclipse 2.1] des fichiers qui sautent dans WEB-INF/classes
    Par iubito dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 04/10/2004, 16h07
  5. [Fichiers] Enregistrer/Déplacer dans un répertoire
    Par babyboy dans le forum Entrée/Sortie
    Réponses: 19
    Dernier message: 12/05/2004, 14h33

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