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 :

Ligne de Commande en PERL


Sujet :

Langage Perl

  1. #1
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2012
    Messages : 35
    Par défaut Ligne de Commande en PERL
    Bonjour à Tous,

    après avoir parcourus un grand nombre de sujets sur ce forum (et d'autres) je n'arrive pas à trouver toutes les commandes à mettre dans un .pl

    Mon cas est le suivant:

    Je dispose d'un répertoire avec de nombreux fichiers textes ayant tous un contenu quasi similaire. J'aimerai que mon .pl exécute les documents un à un et qu'il extrait:

    - Un contenu texte compris entre <MOT1> et plusieurs lignes plus loin <MOT2>
    - Qu'il récupère la ligne 23 (par exemple)
    - Qu'il rajoute une ligne de <blabla "NOMDUFICHIER"> au début puis une autre <bloblo> à la fin

    Puis S'ENREGISTRE SOUS en reprenant son nom d'origine dans un répertoire N+1 (nommé résultat, par exemple)

    Voila pour mon cas... ouf.... j'espère avoir été le plus clair possible, en ce qui concerne les fichiers, ce n'est que du texte. Pour le moment je procède manuellement avec quelques .bat que me mâche un tout petit peu le travail. Ayant peu de connaissance en PERL, je me doute que cela ne représente qu'une poignet de lignes malheureusement dans un langage que je maitrise pas (encore) :/
    Un grand merci par avance à tout ceux qui m'aiguilleront !!!
    Et si besoin de compléments d'info, n’hésitez pas !!

  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
    Billets dans le blog
    1
    Par défaut
    Tu veux faire tout cela dans un script uniligne lancé à la ligne de commande? C'est possible, mais je pense qu'il vaut mieux un vrai petit script (très simple, a priori).

    Deuxième question: tu es sous quel environnement? Cela a de l'importance dès qu'il est question de ligne de commande.

  3. #3
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2012
    Messages : 35
    Par défaut
    Bonjour LoLo,
    avant tout je te remercie pour ta rapide réponse
    Actuellement je suis sous windows7 mais ce petit script est susceptible d’être utilisé sur du Windows XP ( je ne pense pas que ce soit problématique..)
    Concrètement l’intérêt de celui ci, est de remplacer mes petits .bat utiles certes mais fastidieux :/
    C'est suite à une recommandation que je me suis orienté vers le PERL pour automatiser ce petit script
    mais mes connaissances sont pour dire.. minimales..

    Disons que j'ai mon répertoire remplit de fichiers texte où je souhaiterais coller mon petit script dedans ouvrant document par document et qu'il:

    1. extrait le texte contenu entre <MOT1> plusieurs lignes plus bas <MOT2>
    2. extrait uniquement la ligne commençant par <resumer>
    3. Ajout à la première ligne <MOT "NOMDUFICHIER"> puis en fin ajoute un <end>

    Donc fichier par fichier il s'enregistre avec le même nom dans un répertoire N+1 crée au préalable
    ou (j'ose rêver que le script me le crée automatiquement en le nommant par défaut "résultats"

    J'ai tenté au travers de différents morceaux de code s’apparentant à mon besoin mais en vain..
    http://www.developpez.net/forums/d75...-entre-lignes/

    Je te remercie de nouveau et par avance pour tout tes conseils

  4. #4
    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 : 59
    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
    Par défaut
    Je n'ai pas très bien compris ce qu'il faut faire avec l'extraction du résumé dans l'action 2.

    Sinon, les actions 1 et 3 peuvent être assez facilement traitées avec l'opérateur "..".
    S'il s'était agit de simplement remplacer les fichiers "in place" l'option -pi de perl permettrait de le faire assez facilement, mais s'il faut en sus déplacer le fichier résultat ailleurs, il me semble prudent, comme le dit lolo, de passer par un petit script.

  5. #5
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2012
    Messages : 35
    Par défaut
    Par rapport à mon exemple
    2. extrait uniquement la ligne commençant par <RESUMER>
    dans le corps de chaque document à traiter il y a une ligne commençant par<RESUMER> que je souhaite voir apparaitre dans le résultat.

    Exemple (raccourci) de document à traiter:
    <bla>
    <bla>
    <bla>
    <MOT1>
    <bli>
    <bli>
    <MOT2>

    <bla>
    <bla>
    <RESUMER>
    <bla>
    <bla>

    Ce qui représente le Saint Graal pour moi :

    <TEXTEBLABLA="NOMDUFICHIER">
    <MOT1>
    <bla>
    <bla>
    <MOT2>
    <RESUMER>
    <END>

    Et pour finir, il s'enregistre dans un dossier N+1 avec le même nom.
    Le script s'occupe de faire la manipulation pour tout les fichiers du répertoire où il est installé.

    Je me doute que cela ne correspond à quelques lignes de codes mais le language m'est encore peu connu..

  6. #6
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2012
    Messages : 35
    Par défaut A Philou67430
    Bonjour Philou67430 et merci pour ton retour ..
    Je suis d'accord pour le script et c'est suite à un conseil fait que je me suis orienté vers le PERL mais le langage est un peu nouveau pour moi..
    Dans le cas où tu es d'autres conseils (autres langages, ...) je suis preneur.
    Actuellement je fonctionne avec des .bat qui me pré-mâche un peu ces taches répétitives :/ Donc Tout conseil est le bienvenu

  7. #7
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2012
    Messages : 35
    Par défaut Complement d'info
    Finalement le coup du "créer un répertoire" pour copier le résultat dedans est inutile car en faisant une copie du dossier et mettre le script dans cette copie de dossier pour travailler directement les documents, au final ça reviens au même sauf qu'il n'est pas nécessaire de se casser la tête avec cette ligne de code en plus...

    Ma logique (si comprise) vous semble t'elle correcte ?

    Une fois encore, merci pour votre coup de pouce

  8. #8
    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 : 59
    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
    Par défaut
    Il y a une chose que je ne comprends pas dans ton exemple : tu élimines les <bli> <bli> entre <MOT1> et <MOT2>, et tu gardes les <bla> <bla>, mais en les plaçant AVANT <MOT2> (alors qu'à l'origine, ils sont après).
    Ca me semble bizarre.

    Sinon, on se dirige vers quelque chose de simple qu'un uniligne (un peu long) pourrait faire.

    Du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    perl -ni -E 'print if /<RESUMER>/;$in = /<MOT1>/ .. /<MOT2>/;print qq(<TEXTEBLABLA="$ARGV">) if $in == 1;print if $in; print qq(END) if $in =~ /E/' *.txt

  9. #9
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2012
    Messages : 35
    Par défaut A Philou
    j'ai redigé trop vite et pris des termes trop general du coup cela porte à confusion.. mais je te confirme que c'est bien le contenu entre les deux mots qui m'interesse, donc pour reprendre mon exemple:


    Exemple (raccourci) de document à traiter:
    <bla>
    <bla>
    <bla>
    <MOT1>
    <bli>
    <bli>
    <MOT2>
    <bla>
    <bla>
    <RESUMER>
    <bla>
    <bla>

    Ce qui représente le Saint Graal pour moi :

    <TEXTEBLABLA="NOMDUFICHIER">
    <MOT1>
    <bli>
    <bli>

    <MOT2>
    <RESUMER>
    <END>

    Desolé pour cette petite erreur..

    Lorsque je lis la ligne de code celle-ci me semble juste et donc je vais la tester de ce pas mais avant cela un BIG BIG MERCI

    Je reviens de suite avec le resultat !!

  10. #10
    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 : 59
    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
    Par défaut
    Pense tout de même à faire une sauvegarde complète du répertoire avant de lancer la commande.

  11. #11
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2012
    Messages : 35
    Par défaut
    Après personnalisation de la commande, rien ne se passe..
    - J'utilise NOTEPAD++ pour enregistrer le document en .pl
    - Je dispose de PERL PACKAGE MANAGER d'installé (en revanche je ne vois pas où je peux faire remonter le script dedans)
    - Le document est correctement installer dans le répertoire

    Dans la personnalisation, les documents concernés sont des .sgm j'ai donc changé l'extension.

    Là je sèche :/

  12. #12
    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 : 59
    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
    Par défaut
    Bon, je vais donc faire un test
    Je reviens d'ici peu.

  13. #13
    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 : 59
    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
    Par défaut
    Bon, à part une petite erreur dans l'écriture de la balise END, le script fonctionne (c'est à dire qu'il modifie les fichiers). Pourrais-tu vérifier que chez toi, les fichiers sont bien modifiés ?

    Sinon, la balise END doit elle être affichée après le RESUMER ou après le MOT2 ?

  14. #14
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2012
    Messages : 35
    Par défaut re..
    C'est gentil
    En complément, je te joins au message une copie d'ecran du message qui s'affiche au lancement sous dos.. Si cela peut aiguiller..
    Images attachées Images attachées  

  15. #15
    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 : 59
    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
    Par défaut
    Bon, j'ai oublié deux choses :
    - te demander ta version de perl (le script est fait pour la 5.10)
    - écrire l'uniligne pour Windows.

    Voici une nouvelle version qui devrait être mieux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    perl -ni -e "print if /<RESUMER>/;$in = /<MOT1>/ .. /<MOT2>/;print qq(<TEXTEBLABLA=\"$ARGV\">\n) if $in == 1;print if $in; print qq(<END>\n) if $in =~ /E/" *.scm

  16. #16
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2012
    Messages : 35
    Par défaut
    Petit détail qui peut avoir de l'importance, je disais être sur windows 7 mais en version 64Bits.. là où je vais être amener à utiliser le script le poste est un Windows XP 32 bit classique..

    Concernant la version de ACTIVEPERL c'est la 5.16.1

    Cela peut-etre la raison pour laquelle chez moi il (le script) ne fonctionne pas..

  17. #17
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2012
    Messages : 35
    Par défaut suite..
    Désormais le message est le suivant:


    J'ai également mis dans la copie trois des documents qu'il est censé traiter.

    PS: Je vais finir par te demander ton adresse pour t'envoyer une bouteille de champagne tellement je te suis reconnaissant
    Images attachées Images attachées  

  18. #18
    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 : 59
    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
    Par défaut
    OK, je regarderai demain matin, on est proche du but.
    En version 5.16, il ne devrait pas y avoir de soucis pour le faire marcher.

    Par contre, je n'ai pas Activeperl, et je ne pourrai pas l'installer (je travaille sous 7even/Cygwin). Il faudra que tu fasses toi même les essais.
    A demain

  19. #19
    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
    Le passage du paramètre *.scm au script ne va pas marcher sous Windows, je pense, car l'interpréteur de commande de Windows ne transforme pas*.scm comme une liste de fichiers avant de la passer au script (comme le fait un shell Unix ou linux tel que bash).

  20. #20
    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
    @JessyJames: essaie le script de Philou en lui passant comme paramètre (dernier mot de la ligne de commande) le nom complet d'un fichier existant dans le répertoire (au lieu de "*.scm").

    Par exemple, s'il existe un fichier toto.scm::

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    perl -ni -e "print if /<RESUMER>/;$in = /<MOT1>/ .. /<MOT2>/;print qq(<TEXTEBLABLA=\"$ARGV\">\n) if $in == 1;print if $in; print qq(<END>\n) if $in =~ /E/" toto.scm
    Cela devrait te permettre de voir si les changements apportés sont conformes à que tu désires. Il sera temps par après de trouver une solution pour traiter tous les fichiers du répertoire.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 10
    Dernier message: 11/07/2014, 10h21
  2. Réponses: 6
    Dernier message: 22/02/2010, 13h40
  3. Programmer des lignes de commandes en perl
    Par mémèreSoso dans le forum Linux
    Réponses: 2
    Dernier message: 12/06/2009, 17h15
  4. Mysql + Perl + Ligne de command
    Par samus535 dans le forum SGBD
    Réponses: 6
    Dernier message: 05/04/2006, 21h13
  5. Analyser la ligne de commande
    Par benj29 dans le forum C
    Réponses: 14
    Dernier message: 19/11/2002, 05h13

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