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 :

Transcrire une fonction system


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Février 2004
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 17
    Par défaut Transcrire une fonction system
    Bonjour,

    Je débute en perl et je voudrais savoir si il existe un moyen de transcrire la fonction suivante en perl ou dois-je tout simplement utiliser la fonction system?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    for i in `ls $rep/*.trc`
            do
            file=`echo $i | awk -F. '{print $1}'`
            tkprof $file.trc $file.txt sys=no
            done

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2008
    Messages : 39
    Par défaut
    Oui, c'est possible. A noter qu'il te faudra quand même un appel system pour tkprof.

    Cette entrée de la FAQ explique comment parcourir les fichiers d'un répertoire.
    Pour ton besoin précis, il faut que tu modifies le grep de sélection par grep { /\.trc$/}

  3. #3
    Membre averti
    Inscrit en
    Février 2004
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 17
    Par défaut
    Merci,

    J'ai suivi votre exemple et je suis arrivé à cela :

    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
     
    my @fichiers = lister_traces($rep); 
     
    sub lister_traces 
    { 
      opendir (DIR, $rep) 
        or die "impossible d'ouvrir le repertoire $rep\n"; 
      my @file_rep = grep { /\.trc$/} readdir(DIR); 
      closedir (DIR); 
     
      foreach my $nom (@file_rep) 
      { 
        system `tkprof $nom.trc $nom.txt sys=no`; 
      } 
      return @fichiers; 
    }
    J'ai deux petits soucis :

    Comment faire pour que $nom contienne le chemin complet + le fichier et sans le .trc si possible : obtenir quelque chose comme cela par exemple /save/udump/traces/exemple

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2008
    Messages : 39
    Par défaut
    readdir retourne les noms de fichiers sans le path pour les atteindre. Il faut donc l'ajouter ensuite.
    Voici ton code qui fonctionne après quelques corrections. J'ai ajouté un commentaire quand j'ai fait une modification.

    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
    use strict;use warnings;
     
    my $rep = $ARGV[0];
    my @fichiers = lister_traces($rep); 
     
    sub lister_traces 
    { 
      opendir (my $dir, $rep)
        or die "impossible d'ouvrir le repertoire $rep\n"; 
    # $dir au lieu de DIR: c'est plus propre mais ne marche qu'à partir de Perl 5.8
      my @file_rep = grep { -f "$rep/$_" && m/\.trc$/} readdir($dir);
    # -f permet de ne garder que les fichiers (un répertoire pourrait se terminer en .trc) 
      closedir ($dir); 
      foreach my $nom (@file_rep) 
      { 
        $nom =~s /\.trc$//; #enlève l'extension en fin de $nom
        print "tkprof \"$rep/$nom.trc\" \"$nom.txt\" sys=no\n";
       # ne pas oublier les quotes autour des noms de fichiers: ils peuvent contenir des espaces ...
      } 
      return @file_rep; 
      # retourne la liste des fichiers calculée dans la procédure
    }

  5. #5
    Membre averti
    Inscrit en
    Février 2004
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 17
    Par défaut
    Merci beaucoup cela fonctionne.

    En cherchant je suis tombé sur la fonction map et je pense que cela simplifie le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my @file_rep = map { s/\.trc$//;$_;} glob("$rep/*.trc" );

Discussions similaires

  1. cherche une fonction system avec capture de la sortie
    Par ChipsterJulien dans le forum C++
    Réponses: 4
    Dernier message: 28/02/2008, 16h47
  2. Transcrire une fonction mathématique en code Matlab
    Par casper84 dans le forum MATLAB
    Réponses: 1
    Dernier message: 30/03/2007, 17h04
  3. Réponses: 3
    Dernier message: 05/11/2006, 13h19
  4. appel a une fonction systeme
    Par dalou dans le forum C++
    Réponses: 5
    Dernier message: 15/06/2006, 16h18
  5. Réponses: 2
    Dernier message: 30/03/2004, 11h31

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