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 :

perl et excel : écrire le répertoire en ligne de commande


Sujet :

Langage Perl

  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 92
    Par défaut perl et excel : écrire le répertoire en ligne de commande
    Bonjour à tous.

    J'ai une question dont je n'arrive pas à trouver une solution.

    J'ai un script perl qui compte le nombre de fichier commençant par "Trace" et les affiches sur un fichier excel
    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
     
    use warnings; 
    use strict; 
    use File::Find;
    use Spreadsheet::WriteExcel;																	
     
     
    my $workbook  = Spreadsheet::WriteExcel->new('C:\\Documents and Settings\\test_excel.xls');	# Création du fichier excel
     
    my $repertoire_etude = "C:/Log";
     
    	# Création des feuilles de calcul du fichier excel
    my $worksheet = $workbook->add_worksheet("test");
     
     
    sub parcours_repertoire	# Fonction parcours_dir qui récupère les fichiers du répertoire appellé  
    	{
        my ($path) = @_;	
    	my @dir_entries = glob("$path/*");
    	foreach my $entry (@dir_entries)	
    		{
            programme_principal($entry) if -f $entry && $entry =~ m/Trace/;	
            parcours_repertoire($entry) if -d $entry;	
    		}
    	} 
     
     
    my $nb_fichier;	# Initialisation de la variable $nb_fichier
    sub recherche	# Sous programme recherche 
    	{
    	if (-f)
    		{
    		++$nb_fichier if $File::Find::name =~ /Trace/;	
    		}
    	}
     
    find(\&recherche,$repertoire_etude);	
     
    $worksheet->write(0,0,"Il y a $nb_fichier fichiers dans le repertoire")	;
     
     
     
    	my $j = 0;
     
    sub programme_principal
    	{
    	my $fichier =shift;	
     
    	foreach ($fichier)
    	{
    	$worksheet->write($j+5,0,"$fichier");
    	$j++;
    	}
    	}
     
     
    parcours_repertoire($repertoire_etude);	# Appel de la fonction parcours_dir avec le répertoire que l'on veut analyser en paramètres
    Ce que je voudrais savoir c'est si je ne pourrais pas à l’exécution du programme .pl ouvrir la ligne de commande avant l'ouverture du fichier excel pour moi même écrire le répertoire dans lequel je vais appelé les sous - programmes.
    En gros lorsque j’exécuterais le programme j'aurais la commande qui s'ouvrirais avec une question "Quel répertoire voulait vous examiné " et lorsque j'écrirais le répertoire et appuyerais sur entrée le fichier excel s'ouvrirais.

    Est - ce possible ? Comment réaliser cela ?

    Merci beaucoup de votre aide.

  2. #2
    Expert confirmé
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Par défaut
    Je suppose que tu veux changer le contenu de $repertoire_etude pour que l'utilisateur puisse choisir le répertoire à examiner ?
    Dans ce cas, le plus simple est sans doute d'en faire un paramètre de ton programme, autrement dit si ton programme s'appelle AnalyseDossier.pl, tu l'appelles avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .\AnalyseDossier.pl C:\AutreRepertoireDeLog
    si tu veux analyser "C:\AutreRepertoireDeLog" plutôt que "C:\Log"

    Pour ce faire, il faut utiliser @ARGV, la variable qui contient les arguments de la commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my $repertoire_etude = shift @ARGV // 'C:/Log'; # analyser le répertoire donnée en ligne de commande ou C:\Log par défaut
    Si tu veux démarrer Excel à la fin de l'exécution de ton script, rajoute :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    exec('open', 'C:\\Documents and Settings\\test_excel.xls');
    à la fin de ton script.

    (tu gagnerais probablement à mettre ce nom de fichier dans une variable en début de script)

    --
    Jedaï

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 92
    Par défaut
    Citation Envoyé par Jedai Voir le message
    Je suppose que tu veux changer le contenu de $repertoire_etude pour que l'utilisateur puisse choisir le répertoire à examiner ?
    Dans ce cas, le plus simple est sans doute d'en faire un paramètre de ton programme, autrement dit si ton programme s'appelle AnalyseDossier.pl, tu l'appelles avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .\AnalyseDossier.pl C:\AutreRepertoireDeLog
    si tu veux analyser "C:\AutreRepertoireDeLog" plutôt que "C:\Log"

    Pour ce faire, il faut utiliser @ARGV, la variable qui contient les arguments de la commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my $repertoire_etude = shift @ARGV // 'C:/Log'; # analyser le répertoire donnée en ligne de commande ou C:\Log par défaut
    Si tu veux démarrer Excel à la fin de l'exécution de ton script, rajoute :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    exec('open', 'C:\\Documents and Settings\\test_excel.xls');
    à la fin de ton script.

    (tu gagnerais probablement à mettre ce nom de fichier dans une variable en début de script)

    --
    Jedaï
    Bonjour Jedai

    J'ai essayé ce que tu m'a dis mais j'ai plusieurs messages d'erreur.
    Lorsque je lance le programme depuis la ligne de commande, après m'être placé dans le bon répertoire, j'obtiens le message "Can't exec"open" no such file or directory..."

    Lorsque je lance le programme en mettant à côté un nouveau répertoire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .\AnalyseDossier.pl C:\AutreRepertoireDeLog
    J'obtiens le message d'erreur "Can't stat C:\Documents : no such file or directory"

    Je ne comprend pas pourtant j'ai suivi tes inidcations à la lettre.

    Merci

  4. #4
    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
    Billets dans le blog
    1
    Par défaut
    Montre ton code tel qu'il est maintenant. Il n'est pas possible de déboguer sans voir le code.

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 92
    Par défaut
    Citation Envoyé par Lolo78 Voir le message
    Montre ton code tel qu'il est maintenant. Il n'est pas possible de déboguer sans voir le code.
    Mon vrai code fait plus de 1000 lignes, mais je peux mettre celui - ci qui fonctionne a peu près pareil et qui affiche les mêmes messages d'erreur
    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
     
    use warnings; 
    use strict; 
    use File::Find;
    use Spreadsheet::WriteExcel;																	
     
     
    my $workbook  = Spreadsheet::WriteExcel->new('C:\\Documents and Settings\\stage\\Mes documents\\FichierLog\\test_excel.xls');	# Création du fichier excel
     
    my $repertoire_etude = shift @ARGV // 'C:/Log';
     
    	# Création des feuilles de calcul du fichier excel
    my $worksheet = $workbook->add_worksheet("test");
     
     
    sub parcours_repertoire	# Fonction parcours_dir qui récupère les fichiers du répertoire appellé  
    	{
        my ($path) = @_;	
    	my @dir_entries = glob("$path/*");
    	foreach my $entry (@dir_entries)	
    		{
            programme_principal($entry) if -f $entry && $entry =~ m/Trace/;	
            parcours_repertoire($entry) if -d $entry;	
    		}
    	} 
     
     
    my $nb_fichier;	# Initialisation de la variable $nb_fichier
    sub recherche	# Sous programme recherche 
    	{
    	if (-f)
    		{
    		++$nb_fichier if $File::Find::name =~ /Trace/;	
    		}	
    	}
     
    find(\&recherche,$repertoire_etude);	
     
    $worksheet->write(0,0,"Il y a $nb_fichier fichiers dans le repertoire")	;
     
     
     
    	my $j = 0;
     
    sub programme_principal
    	{
    	my $fichier =shift;	
     
    	foreach ($fichier)
    	{
    	$worksheet->write($j+5,0,"$fichier");
    	$j++;
    	}
    	}
     
     
    parcours_repertoire($repertoire_etude);	# Appel de la fonction parcours_dir avec le répertoire que l'on veut analyser en paramètres
    	$workbook->close();	
     
    exec('open', 'C:\\Documents and Settings\\stage\\Mes documents\\FichierLog\\test_excel.xls');

  6. #6
    Expert confirmé
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Par défaut
    Mes vieux souvenirs de Windows m'ont trompé, ce n'est pas "open" mais "start" que tu dois utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    exec('start', '', 'C:\\Documents and Settings\\test_excel.xls');
    devrait marcher.

    Pour ton autre erreur, il est vraisemblable que tu ais appelé ta commande avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .\AnalyseDossier.pl C:\Documents and Settings\...
    Or ceci ne passe pas le bon chemin à la commande (ceci est valable pour tous les programmes en ligne de commande), il faut utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .\AnalyseDossier.pl "C:\Documents and Settings\..."
    Les " regroupent les mots pour former un seul argument (dans le cas précédent, ton chemin est découpé selon les espaces et passé comme plusieurs arguments).

    --
    Jedaï

  7. #7
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 92
    Par défaut
    Citation Envoyé par Jedai Voir le message
    Mes vieux souvenirs de Windows m'ont trompé, ce n'est pas "open" mais "start" que tu dois utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    exec('start', '', 'C:\\Documents and Settings\\test_excel.xls');
    devrait marcher.
    J'ai le même message d'erreur malheuresement mais avec start à la place de open.
    Pour ton autre erreur, il est vraisemblable que tu ais appelé ta commande avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .\AnalyseDossier.pl C:\Documents and Settings\...
    Or ceci ne passe pas le bon chemin à la commande (ceci est valable pour tous les programmes en ligne de commande), il faut utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .\AnalyseDossier.pl "C:\Documents and Settings\..."
    Les " regroupent les mots pour former un seul argument (dans le cas précédent, ton chemin est découpé selon les espaces et passé comme plusieurs arguments).

    --
    Jedaï
    Oui tu as raison j'ai changé et ça change de répertoire mais le problème c'est que le fichier crée ne contient rien. Je crois que quand il y a des espaces dans mon répertoire, le fichier n'affiche rien car j'avais déjà eu ce problème. Sais tu si il y a une solution ?

    Merci

  8. #8
    Expert confirmé
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Par défaut
    start est apparemment une commande du shell et non un programme, donc tu dois passer par le shell pour en profiter, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    exec('cmd', '/c', 'start', '', 'C:\\Documents and Settings\\test_excel.xls');
    Je ne suis pas sous Windows, donc ces lignes ne sont pas testées.

    --
    Jedaï

  9. #9
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 92
    Par défaut
    Citation Envoyé par Jedai Voir le message
    start est apparemment une commande du shell et non un programme, donc tu dois passer par le shell pour en profiter, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    exec('cmd', '/c', 'start', '', 'C:\\Documents and Settings\\test_excel.xls');
    Je ne suis pas sous Windows, donc ces lignes ne sont pas testées.

    --
    Jedaï
    C'est bizarre lorsque je lance dans la commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .\Etude_complet_des_logs.pl "C:\test_log
    Je me suis avant placé dans le bon répertoire avec cd C:\DOcuments and Settings\stage\Mes documents

    Le programme se compile et il n y a pas d'erreur mais quand il veut se lancé j'ai un message qui apparaît à l'écran
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    windows ne trouve pas 'C:\Documents'. Vérifiez que vous avez entré le nom correctement
    Mais quand après je change l emplacement du fichier excel crée et que je le met sur C:\excel
    ça marche.

    Sais tu pourquoi ?

    Merci

  10. #10
    Expert confirmé
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Par défaut
    Il y a quelque chose dans ton programme qui ne gère pas correctement les espaces dans ton nom de fichier. Sans détail supplémentaire, je ne sais pas quelle partie (normalement le exec ne devrait pas poser problème, j'ai sciemment utilisé la méthode avec une liste de paramètre pour éviter ces problèmes). Tu peux toujours essayer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    exec(qq{start "" "C:\\Documents and Settings\\test_excel.xls"});
    voir si ça marche mieux (mais si c'est le cas, il y a quelque chose de bien cassé dans l'implémentation soit de start, soit de exec() sous Windows).

    --
    Jedaï

  11. #11
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 92
    Par défaut
    Citation Envoyé par Jedai Voir le message
    Il y a quelque chose dans ton programme qui ne gère pas correctement les espaces dans ton nom de fichier. Sans détail supplémentaire, je ne sais pas quelle partie (normalement le exec ne devrait pas poser problème, j'ai sciemment utilisé la méthode avec une liste de paramètre pour éviter ces problèmes). Tu peux toujours essayer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    exec(qq{start "" "C:\\Documents and Settings\\test_excel.xls"});
    voir si ça marche mieux (mais si c'est le cas, il y a quelque chose de bien cassé dans l'implémentation soit de start, soit de exec() sous Windows).

    --
    Jedaï
    Bonjour,

    Le programme marche parfaitement avec la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    exec('cmd', '/c', 'start', '', 'C:\\Documents and Settings\\test_excel.xls');
    C'est juste qu'il ne fonctionne plus si le fichier excel que je crée n'est pas directement dans un dossier du disque local C.
    D'ailleurs j'ai le même problème si mes fichiers log que j'examine ne sont eux pas aussi dans un dossier du disque local.

    Mais bon je vais faire avec.

    Merci

Discussions similaires

  1. Réponses: 15
    Dernier message: 18/07/2014, 10h29
  2. Simple copie d'un répertoire en ligne de commande
    Par keviin55 dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 19/07/2012, 18h11
  3. Problème répertoire dans ligne de commande MSTest
    Par Dark Ryus dans le forum Visual Studio
    Réponses: 4
    Dernier message: 28/03/2012, 16h01
  4. [Débutant] écrire dans excel mais pas toutes les lignes
    Par lauri-anne dans le forum MATLAB
    Réponses: 2
    Dernier message: 14/07/2010, 11h35
  5. PERL et EXCEL (Ouverture d'Excel avec modification)
    Par localboy dans le forum Modules
    Réponses: 11
    Dernier message: 09/05/2006, 09h18

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