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 :

Débutant Perl question fichier


Sujet :

Langage Perl

  1. #1
    Membre régulier
    Inscrit en
    Juillet 2006
    Messages
    232
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Juillet 2006
    Messages : 232
    Points : 79
    Points
    79
    Par défaut Débutant Perl question fichier
    Bonjour aymanouch, bonjour à tous,

    Je débute Perl que je viens d'installer sous windows.
    Voilà ma situation: j'ai un fichier texte 'lefic.txt' qui contient les 8 lignes suivantes (entre les deux traits):
    ________________________________
    Allo 132, Allo 132
    a525, b525
    c415, h415,c414,c413,c412,c411, c410
    c413 h415,c414,c413,c412,c411, c410
    c412 h415,c414,c413,c412,c411, c410
    c411, h415,c414,c413,c412,c411, c410
    c410, h415,c414,c413,c412,c411, c410
    c414 h415,c414,c413,c412,c411, c410
    ________________________________
    avec l'arborescence d:\dossiersDD\lefic.txt.

    Je veux écrire un script Perl qui fasse:
    1. une copie de lefic.txt avec un nouveau nom lefic2.txt(dans le même repertoire)
    2. dans le fichier lefic2.txt tout c413 va être substitué par n212
    3. dans le fichier lefic2.txt tout 525 va être substitué par 606
    4. dans le fichier lefic2.txt toute séquence 414 va être supprimée (ou remplacée par la séquence vide : '' ).

    Merci infiniment.

  2. #2
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 577
    Points : 2 021
    Points
    2 021
    Par défaut
    Bonjour,

    comme répondait gilou dans le forum "Programmation" de Hardware-fr.com :

    Eh bien, si tu nous montrait ton début de script?
    Parce qu'il n'est pas question qu'on fasse ton boulot à ta place.
    A+




    PS 1 : tu aurais pu enlever "aymanouch" au début de ton texte, il n'est pas ici je crois
    PS 2 : inutile de nous remercier, nous attendons ton code à présent

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 33
    Points : 29
    Points
    29
    Par défaut
    Citation Envoyé par maestro1303 Voir le message
    Bonjour aymanouch, bonjour à tous,

    Je débute Perl que je viens d'installer sous windows.
    Voilà ma situation: j'ai un fichier texte 'lefic.txt' qui contient les 8 lignes suivantes (entre les deux traits):
    ________________________________
    Allo 132, Allo 132
    a525, b525
    c415, h415,c414,c413,c412,c411, c410
    c413 h415,c414,c413,c412,c411, c410
    c412 h415,c414,c413,c412,c411, c410
    c411, h415,c414,c413,c412,c411, c410
    c410, h415,c414,c413,c412,c411, c410
    c414 h415,c414,c413,c412,c411, c410
    ________________________________
    avec l'arborescence d:\dossiersDD\lefic.txt.

    Je veux écrire un script Perl qui fasse:
    1. une copie de lefic.txt avec un nouveau nom lefic2.txt(dans le même repertoire)
    2. dans le fichier lefic2.txt tout c413 va être substitué par n212
    3. dans le fichier lefic2.txt tout 525 va être substitué par 606
    4. dans le fichier lefic2.txt toute séquence 414 va être supprimée (ou remplacée par la séquence vide : '' ).

    Merci infiniment.
    Bonjour,


    1.
    utilise la fonction rename(OLDNAME,NEWNAME).
    2. récupère le contenu de ton txt dans une variable perl $maVariable puis fait l'expression régulière suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $maVariable=~s/c413/n212/g
    3. même chose que le piont 2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $maVariable=~s/525/606/g
    4. idem
    à la fin tu réécris la variable dans ton fichier.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    505
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Août 2008
    Messages : 505
    Points : 712
    Points
    712
    Par défaut
    Ca s'écrit en une ligne sous unix:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    cat file | perl -nle 's/c413/n212/g; s/525/606/g;s/414//g; print' > file2
    Bon, à mon avis, ce que tu demande est bizarre. C'est quoi 414, c'est c414 ?

    A toi de te débrouiller avec ça.

  5. #5
    Membre régulier
    Inscrit en
    Juillet 2006
    Messages
    232
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Juillet 2006
    Messages : 232
    Points : 79
    Points
    79
    Par défaut
    Bonjour,

    Voici le code que je viens d'écrire avec votre aide à tous.




    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #!c\\Perl\\bin\\perl -w
     
    use File::Copy;
     
    copy('C:\\C_et_Win\\Perl\\Scripts_Programs\\Exemples\\fText\\lefic.txt','C:\\C_et_Win\\Perl\\Scripts_Programs\\Exemples\\fText\\lefic2.txt') || die "Erreur E/S:$!\n";
     
    #DANS LA COMMANDE QUI SUIT JE PENSE CHARGER LE CONTENU DU TEXTE DANS $maVariable
    open('C:\\C_et_Win\\Perl\\Scripts_Programs\\Exemples\\fText\\lefic2.txt',$maVariable) || die "Erreur E/S:$!\n";
    #DANS LA COMMANDE QUI SUIT JE PENSE substituer n212 à c413
    $maVariable=~s/c413/n212/g;
    #DANS LA COMMANDE QUI SUIT JE PENSE SAUVEGADER LE NOUVEAU CHANGEMENT DANS lefic2.txt
    open('>C:\\C_et_Win\\Perl\\Scripts_Programs\\Exemples\\fText\\lefic2.txt',$maVariable) || die "Erreur E/S:$!\n";


    quand je lance le programme à partir du point de commande DOS par perl marche1.pl j'obtiens le message d'erreur suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Name "main::C:\C_et_Win\Perl\Scripts_Programs\Exemples\fText\lefic2.txt" used on
    ly once: possible typo at marche1.pl line 7.
    Use of uninitialized value $maVariable in open at marche1.pl line 7.
    Erreur E/S:No such file or directory
    Par contre le programme me copie bien lefic dans lefic2 mais ne fait pas davantage.

    Merci à tous;

    ps: toutes les remarques de Arioch sont exactes et pertinentes SCUSI

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    505
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Août 2008
    Messages : 505
    Points : 712
    Points
    712
    Par défaut
    open, c'est pas en sens inverse ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    open ($handler_file,"c:\\mon_rep\\tralala.txt");

  7. #7
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 577
    Points : 2 021
    Points
    2 021
    Par défaut
    Bonjour,

    quelques remarques :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    copy('C:\\C_et_Win\\Perl\\Scripts_Programs\\Exemples\\fText\\lefic.txt','C:\\C_et_Win\\Perl\\Scripts_Programs\\Exemples\\fText\\lefic2.txt') || die "Erreur E/S:$!\n";
    Logiquement, tu peux remplacer les "\\" par "/", ça doit fonctionner et ce sera plus lisible

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    open('C:\\C_et_Win\\Perl\\Scripts_Programs\\Exemples\\fText\\lefic2.txt',$maVariable) || die "Erreur E/S:$!\n";
    Je ne comprend pas ce que tu fais ici mais le 1er argument de la fonction open, c'est le handle de fichier, le second étant le nom du fichier.

    Là, je ne vois pas trop pourquoi tu semble utiliser un nom de fichier comme handle ?

  8. #8
    Membre régulier
    Inscrit en
    Juillet 2006
    Messages
    232
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Juillet 2006
    Messages : 232
    Points : 79
    Points
    79
    Par défaut
    Bonjour,

    J'ai changé le script en fonction des réponses précédentes.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #!c\\Perl\\bin\\perl -w
    #use strict;
    use File::Copy;
     
    copy('C:\\C_et_Win\\Perl\\Scripts_Programs\\Exemples\\fText\\lefic.txt','C:\\C_et_Win\\Perl\\Scripts_Programs\\Exemples\\fText\\lefic2.txt') || die "Erreur E/S:$!\n";
     
    open($maVariable,'C:\\C_et_Win\\Perl\\Scripts_Programs\\Exemples\\fText\\lefic2.txt') || die "Erreur E/S:$!\n";
     
    $maVariable=~s/c413/n212/g;
    open($maVariable,'>C:\\C_et_Win\\Perl\\Scripts_Programs\\Exemples\\fText\\lefic2.txt') || die "Erreur E/S:$!\n";
    Je n'ai plus le message d'erreur précédent, mais le descripteur $maVariable qui contient -d'après ce que j'ai compris- une copie de lefic2.txt est... vide.

    Conclusion: après la dernière commande lefic2 ne contient plus rien car il a été initilisé par $maVariable desepérement vide.


    PS: je n'ai encore essayé de remplacer les "\\" par "/", car je me rappelle que sur une autre machine sous XP ça n'avait pas marché. Je vais l'essayer et je vous dis.

  9. #9
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 577
    Points : 2 021
    Points
    2 021
    Par défaut
    Si tu veux que ta variable $maVariable contienne l'intégralité du fichier, alors le code suivant me semble plus approprié :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    open(IN,'C:\\C_et_Win\\Perl\\Scripts_Programs\\Exemples\\fText\\lefic2.txt') or die "Erreur E/S:$!\n";
     
    @_ = <IN>;
    close(IN);
     
    $maVariable = join("", @_);
     
    print $maVariable;
    Avec ceci, normalement ta variable contient tout ton fichier.

  10. #10
    Membre régulier
    Inscrit en
    Juillet 2006
    Messages
    232
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Juillet 2006
    Messages : 232
    Points : 79
    Points
    79
    Par défaut
    Bonjour,

    Effectivement le code qui suit me permet d'afficher l'intégralité du fichier avec les substitutions qu'il faut! Merci

    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
    #!c\\Perl\\bin\\perl -w
    #use strict;
    use File::Copy;
     
    copy('C:\\C_et_Win\\Perl\\Scripts_Programs\\Exemples\\fText\\lefic.txt','C:\\C_et_Win\\Perl\\Scripts_Programs\\Exemples\\fText\\lefic2.txt') || die "Erreur E/S:$!\n";
     
    open(IN,'C:\\C_et_Win\\Perl\\Scripts_Programs\\Exemples\\fText\\lefic2.txt') or die "Erreur E/S:$!\n";
     
    @_ = <IN>;
    close(IN);
     
    $maVariable = join("", @_); 
    $maVariable=~s/c413/n212/g;
     
    print $maVariable ;
    Mon seul souci pour aujourd'hui est que je voudrais que le texte désormais contenu dans $maVariable et qui s'affiche bien à l'écran soit écrit dans le lefic2.
    J'ai essayé les syntaxes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    open ($maVariable,'>C:\\C_et_Win\\Perl\\Scripts_Programs\\Exemples\\fText\\lefic2.txt')
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    print $maVariable 'C:\\C_et_Win\\Perl\\Scripts_Programs\\Exemples\\fText\\lefic2.txt')
    ;
    et ça n'a rien donné.

    PS: J'essaierai de comprendre -en cherchant- la signification et la portée des 3 lignes de codes suivantes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    @_ = <IN>;
    close(IN);
     
    $maVariable = join("", @_);
    Sinon, je vais devoir vous en demander la signification plutard.

    Merci beaucoup Arioch

  11. #11
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    J'essaierai de comprendre -en cherchant- la signification et la portée des 3 lignes de codes suivantes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    open(IN,'C:\\C_et_Win\\Perl\\Scripts_Programs\\Exemples\\fText\\lefic2.txt') or die "Erreur E/S:$!\n";
     
    @_ = <IN>;
    close(IN);
     
    $maVariable = join("", @_);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    open(IN,'C:\\C_et_Win\\Perl\\Scripts_Programs\\Exemples\\fText\\lefic2.txt') or die "Erreur E/S:$!\n";
    Tu crées un filehandle IN

    Via le filehandle, tu places le contenu de ton fichier dans la variable @_

    Tu fermes le filehandle

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $maVariable = join("", @_);
    La fonction 'join' lie les valeurs de @_ via "" (rien du tout) cela signifie donc que $mavariable contiendra toutes les valeurs de @_ accolées bout à bout.

    Est-ce clair?


    Essaie avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    open(OUT,">C:\\C_et_Win\\Perl\\Scripts_Programs\\Exemples\\fText\\lefic2.txt") or die "Erreur E/S:$!\n";
    print OUT $mavariable;
    close(OUT);
    -- Jasmine --

  12. #12
    Expert éminent
    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
    Points : 8 586
    Points
    8 586
    Par défaut
    maestro, tu es sûr que tu ne ferais pas mieux de commencer par apprendre à programmer en Perl un minimum ? Au moins les commandes d'IO de base, non ?
    Nous avons des tutoriels sur ce site si tu veux t'y mettre.

    Parce que là ce sujet commence à ressembler à un mini-cours sur l'IO en Perl, mauvais et fragmenté.

    Reviens nous voir après avoir appris les bases.

    --
    Jedaï

  13. #13
    Membre régulier
    Inscrit en
    Juillet 2006
    Messages
    232
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Juillet 2006
    Messages : 232
    Points : 79
    Points
    79
    Par défaut
    Bonjour à Tous,

    Jedai a raison, et je vais essayer de m'y mettre aux tutos de ce langage que je découvre et que je trouve fabuleux.

    Pour le moment les explications de Jasmina me suffisent et me réconfortent.

    Grâce aux aides de Arioch et de Jasmina, j'estime que j'ai reglé mon problème et je marque le sujet Résolu

    Merci infiniment et à bientôt dans un autre sujet.

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

Discussions similaires

  1. Question de débutant : BDD Vs Fichier texte
    Par Beginner. dans le forum Débuter
    Réponses: 8
    Dernier message: 02/11/2014, 11h45
  2. Question de débutant sur les fichiers
    Par ben123 dans le forum VB 6 et antérieur
    Réponses: 12
    Dernier message: 23/11/2010, 09h07
  3. [débutant] PERL :fichier saisi en variable ?
    Par laatysha dans le forum Langage
    Réponses: 9
    Dernier message: 17/06/2008, 14h07
  4. Réponses: 2
    Dernier message: 11/06/2008, 22h37
  5. [débutant]Perl lire un fichier texte
    Par Ralfman68 dans le forum Langage
    Réponses: 5
    Dernier message: 06/06/2007, 20h28

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