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 :

Parser plusieurs fichiers


Sujet :

Langage Perl

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 26
    Points : 15
    Points
    15
    Par défaut Parser plusieurs fichiers
    Bonjour,

    j'ai suivi le tuto http://djibril.developpez.com/tutoriels/perl/perl-xml/ pour parses un fichier XML et ça marche impeccable.

    Maintenant j'ai plusieurs fichiers XML dans un dossier et j'aimerai tous les parser.

    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
    #Ouverture du fichier
    $doc = 'ACDigest-AnnapolisCityDigest107788.xml';
    open(FIC, $doc) or die "Problème à l\'ouverture : $!";   
    #Parcours du fichier xml	 
    while(<FIC>){
    		#Survol des balises non intéressantes
           	next if (/xml/); next if (/AudioDoc/); next if (/Proc/);
            next if (/Channel/); next if (/Speaker/); next if (/Segment/);
            my @l =	split; #Split des balises Word
    		#comptage des occurences + mise en minuscule + suppr espaces
      		$mot=lc($l[4]);
      		#stemming
      		$mot = stem($mot);
    	   	$mot=~ s/\s+//g; # supprime les espaces
      		$mot =~ s/[;.,:-?!]$// ; # supprime la ponctuation
      		#suppression des mots outils
      		if ($stopword{$mot}) {$mot = ''};
     		#si le mot est différent de la chaine vide
      		if ($mot ne '') {$comptage{$mot} ++};	
    }
     
    # Fermeture des fichiers
    close($FhResultat);
    Une idée ?

  2. #2
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 469
    Points
    12 469
    Billets dans le blog
    1
    Par défaut
    Quelque chose comme cela (non testé), en supposant que tous les fichiers XML sont dans le répertoire courant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    my @files = glob ("*.xml");
    foreach my $file (@files) {
         open my $FIC, "<", $file or die "ouverture impossible de $file $! \n";
         while (<$FIC> {
              next if /xml/ or /AudioDoc/ or /Proc/ or /Channel/ or /Speaker/ or /Segment/;
              # ... suite et fin du traitement du fichier XML courant
         }
         close $FIC;
    }

  3. #3
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Autre solution, si le traitement de tous les fichiers est équivalent au traitement de la concaténation de tous les fichiers :
    - tu passes en paramètre au script, la liste de tous les fichiers à traiter
    - tu utilises while (<>) au lieu d'ouvrir le fichier et d'utiliser while(<$FIC>)
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 26
    Points : 15
    Points
    15
    Par défaut
    Merci pour vos réponses.
    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
    my @files = glob ("*.xml");
    foreach my $file (@files) {
         open my $FIC, "<", $file or die "ouverture impossible de $file $! \n";
     
    #Parcours du fichier xml	 
    while(<FIC>){
    		#Survol des balises non intéressantes
           	next if /xml/ or /AudioDoc/ or /Proc/ or /Channel/ or /Speaker/ or /Segment/;
            my @l =	split; #Split des balises Word
    		#comptage des occurences + mise en minuscule + suppr espaces
      		$mot=lc($l[4]);
      		#stemming
      		$mot = stem($mot);
    	   	$mot=~ s/\s+//g; # supprime les espaces
      		$mot =~ s/[;.,:-?!]$// ; # supprime la ponctuation
      		#suppression des mots outils
      		if ($stopword{$mot}) {$mot = ''};
     		#si le mot est différent de la chaine vide
      		if ($mot ne '') {$comptage{$mot} ++};	
    }
     
    }
    #Affichage de la table de hachage triée par valeur
    foreach $key (sort { $comptage{$a} <=> $comptage{$b} } keys %comptage) {
    	$val = $comptage{$key};
    	print {$FhResultat} "Value:$val | Key:$key \n";
    }
    # Fermeture des fichiers
    #close($doc);
    close($FIC);
    close($FhResultat);
    Ca ne marche pas....

    Oui mes documents XML sont dans le même dossier (j'en ai 250).

  5. #5
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 469
    Points
    12 469
    Billets dans le blog
    1
    Par défaut
    Ton descripteur de fichier s'appelle $FIC (avec le signe '$'):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    open my $FIC, "<", $file or die "ouverture impossible de $file $! \n";
    Et plus bas, tu cherches à lire FIC (sans le signe '$'):

    Change cette ligne:

    Il y a peut-être d'autres erreurs, mais celle-là était clairement bloquante,car tu ne lis même pas le fichier.

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 26
    Points : 15
    Points
    15
    Par défaut
    Effectivement ... j'avais pas vu. Maintenant j'ai le droit à cette erreur :
    Global symbol "$FIC" requires explicit package name at Parseur.pl

  7. #7
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 469
    Points
    12 469
    Billets dans le blog
    1
    Par défaut
    $FIC est déclaré dans le foreach. Tu le fermes trop tard, quand tu es sorti de la boucle foreach. Le "clsoe $FIC" n'est plus dans la portée lexicale de ta déclaration.

    Il faut le fermer entre la fin de la boucle while et la fin de la boucle foreach, c'est-à-dire ligne 20 dans ton code ci-dessus. Ce qui est logique, en principe tu veux fermer $FIC avant d'en ouvrir un autre.

  8. #8
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 26
    Points : 15
    Points
    15
    Par défaut
    Merci beaucoup pour ton aide.

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

Discussions similaires

  1. [PHP 5.0] Parser automatiquement plusieurs fichiers .data vers mysql
    Par josse34 dans le forum Langage
    Réponses: 10
    Dernier message: 03/10/2013, 16h59
  2. Parser plusieurs paramètres dans un fichier
    Par amazigh42 dans le forum Shell et commandes GNU
    Réponses: 6
    Dernier message: 08/02/2013, 07h16
  3. Réponses: 2
    Dernier message: 31/03/2010, 12h34
  4. [JDOM] Parser plusieurs fichiers xml pour en faire 1
    Par Mygush dans le forum Format d'échange (XML, JSON...)
    Réponses: 11
    Dernier message: 05/07/2007, 16h15
  5. [XML][Java] parser plusieurs fichiers en un seul arbre DOM ?
    Par mrlenul dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 29/11/2005, 11h09

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