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 :

Comment ouvrir un répertoire et afficher le nom du répertoire en début de ligne


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 77
    Par défaut Comment ouvrir un répertoire et afficher le nom du répertoire en début de ligne
    Bonjour à vous,

    je suis novice en Perl et je cherche à rendre automatique une tâche fastidieuse, je m'explique :
    - j'ai un répertoire X contenant plusieurs sous-répertoires a b c d ...
    - ces sous-rép 'a' 'b' 'c' 'd'... contiennent chacun un seul fichier Z en xml
    - dans ce fichier Z il y a un texte par ligne avec des balise xml

    Je cherche à faire un programme qui ouvre le répertoire X et qui lise tous les fichiers Z (contenus dans 'a' ou 'b' ou 'c'...) ligne par ligne et qui ajoute au début de chaque ligne la balise xml dans laquelle se trouve le nom du sous-rép 'a' 'b' 'c' 'd'...

    exemple :

    fichier entrée :
    <texte> bla bla bla <\texte>

    fichier sortie :
    <a><texte> bla bla bla <\texte><\a>

    J'espère avoir été claire dans mon explication.

    Merci d'avance de votre aide.

  2. #2
    Membre expérimenté

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2011
    Messages
    184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2011
    Messages : 184
    Par défaut
    Sans trop chercher dans le détail :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    use strict;
    use warnings;
     
     
    my @files = <./test/*/*.txt>;
     
    foreach my $f (@files) {
      open(F,$f) or print "Impossible d'ouvrir ".$f."\n" and next;
      $f=~/\/([^\/]+)\/[^\/]+\.[^\/]+/;
      while(my $l = <F>) {
        print "<".$1.">".$l."</".$1.">\n"
      }
      close F
    }

  3. #3
    Responsable Perl et Outils

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    Il y a des sources disponibles dans la rubrique Perl, il serait plutôt intéressant de les utiliser au lieu de réinventer la roue à chaque fois vu qu'ils sont là pour vous .

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 77
    Par défaut
    Merci beaucoup Dimitry !
    J'ai juste une question pour le programme soit parfait :
    -mon fichier de sortie est comme ça :

    <a><texte> bla bla bla<\texte>
    <\a>

    que dois-je changer pour avoir la balise <\a> sur la même ligne ?



    Merci.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 77
    Par défaut
    j'ai essayé de personnaliser le code pour mon travail comme ceci :

    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
    use strict;
    use warnings;
     
    my @files = <./A61K/*/*.txt>;
     
    foreach my $f (@files) {
      open(F,$f) or print "Impossible d'ouvrir ".$f."\n" and next;
      $f=~/\/([^\/]+)\/[^\/]+\.[^\/]+/;
      while(my $l = <F>) {
    	chomp;
    	$ligne=$_;
    	if ($ligne =~ /^(.*)<ttp lng='eng'>(.*)<\/ttp>(.*)<reseng>(.*)<\/reseng>(.*)$/){
    		$TITLE = $2;
    		$ABS = $4;
    		print "<title En> $TITLE <\/title><abstract En> $ABS <\/abstract> \n";
    	}
    	elsif ($ligne =~ /^(.*)<ttp lng='fre'>(.*)<\/ttp>(.*)<resfre>(.*)<\/resfre>(.*)$/){
    		$TITLE = $3;
    		$ABS = $5;
    		print "<title Fr> $TITLE <\/title><abstract Fr> $ABS <\/abstract> \n";
    	}
    	else {
    		print "<autre langue> \/autre langue>\n"
    	}
    	print "<".$1.">".$l."</".$1.">\n";
      }
      close F
    }

    mais il ne fonctionne pas, j'aimerai que le fichier de sortie affiche une partie de la ligne (titre+résumé).

    est-ce un problème de variable ?

  6. #6
    Membre expérimenté

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2011
    Messages
    184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2011
    Messages : 184
    Par défaut
    Tu n'as pas déclaré tes variables.
    Ceci n'est pas correct :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    while(my $l = <F>) {
    chomp;
    $ligne=$_;
    Ce devrait être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    while(my $ligne = <F>) {
    chomp $ligne;
    Mon code fonctionnait à condition qu'il n'y ait pas d'autres expressions régulières ($1 représente le premier ensemble matché par la dernière REGEXP).

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

Discussions similaires

  1. Afficher le nom du répertoire parent
    Par simono dans le forum Langage
    Réponses: 2
    Dernier message: 03/04/2008, 18h42
  2. Comment ouvrir un fichier sans connaitre son nom
    Par APoLLoN1234 dans le forum C++
    Réponses: 8
    Dernier message: 10/09/2006, 19h04
  3. Comment ouvrir un répertoire ?
    Par elsouljacker dans le forum Débuter
    Réponses: 2
    Dernier message: 03/05/2006, 17h07
  4. Réponses: 2
    Dernier message: 18/10/2005, 11h54
  5. Réponses: 2
    Dernier message: 08/07/2005, 11h40

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