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 "déconcatener" une chaine


Sujet :

Langage Perl

  1. #1
    Futur Membre du Club
    Inscrit en
    Août 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 9
    Points : 5
    Points
    5
    Par défaut comment "déconcatener" une chaine
    Bonjour ,

    j'ai créer un fichier de sortie à partir d'un fichier d'entrée en perl

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    open (IN, $InputFile) || die "Problem with the input file : $!";
    my $sortie_1="out_" .$InputFileNoDir ; 
    open (OUT, "> $sortie_1.txt") || die "Problem with the output file : $!";

    mon problème est que le fichier d'entrée se presente sous la forme
    xxx.dec
    donc mon fichier de sortie est alors
    out_xxx.dec.txt
    je ne veux pas avoir le point dec
    j'ai pensé au split mais je n'arrive pas à supprimer ".dec" car cette renvoie un tableau

    Autre question
    je voudrais que mon fichier de sortie soit dans le même répertoire que mon fichier d'entrée mais pas dans le même repertoire que mon fichier perl
    je recupère bien le chemin de mon fichier d'entrée mais après je ne sais pas quoi faire.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    copy($sortie_1,$InputDir);
    je n'arrive pas à copier dans le bon repertoire , je n'ai pâs de message d'erreur mais rien ne se passe.


    Merci si vous avez des idées

  2. #2
    Membre expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Points : 3 284
    Points
    3 284
    Par défaut
    le '.' est un caractère spécial des regexp qui est destiné à se subsituer à n'importe quel autre caratère.

    Quand tu veux faire un split sur le caractere '.' précisément il faut le prefixer avec \ et dans ce cas il ne joue plus sont role de caractère spécial.

    exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $informations = "A.B.C.D";
    @personne = split(/\./, $informations);
    doit te retourner un tableau ("A","B","C","D")


    autrement pour ton cas il existe aussi la fonction basename
    http://perldoc.perl.org/File/Basename.html
    bazar: http://www.improetcompagnie.com/publ...ctacles-6.html

    BÉPO la disposition de clavier francophone, ergonomique et libre: http://bepo.fr/wiki/Accueil

    Emacs Wiki: http://www.emacswiki.org/

    En attente de ce que produira: http://www.pushmid.com

  3. #3
    Futur Membre du Club
    Inscrit en
    Août 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    je te remercie pour ta réponse rapide
    j'ai effectivevement utiliser la fonction basename et j'ai mon résultat
    merci encore, je me cassais la tête avec le split
    maintenant, connaitrais_tu un moyen d'enregistrer mon fichier de sortie dans le même répertoire que mon fichier d'entrée?

  4. #4
    Membre expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Points : 3 284
    Points
    3 284
    Par défaut
    Citation Envoyé par maluv Voir le message
    maintenant, connaitrais_tu un moyen d'enregistrer mon fichier de sortie dans le même répertoire que mon fichier d'entrée?
    A priori il n'y a pas de raison que ton script change de repertoire sans que tu le lui dise.

    maintenant si le nnom de ton fichier il y'a un chemin tu peux le récupérer avec dirname qui est décrit dans la page donnée précédement.
    bazar: http://www.improetcompagnie.com/publ...ctacles-6.html

    BÉPO la disposition de clavier francophone, ergonomique et libre: http://bepo.fr/wiki/Accueil

    Emacs Wiki: http://www.emacswiki.org/

    En attente de ce que produira: http://www.pushmid.com

  5. #5
    Futur Membre du Club
    Inscrit en
    Août 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    j'ai peut être pas bien expliquer mon problème.
    au fait pour dérouler le script , je fais dans le DOS

    path\xxx.pl path2\yyy.dec

    mon script fait un grep de regexp et me met le tout dans le fichier de sortie

    le pb est que mon "out_yyy" ( fichier de sortie) se trouve dans path , ce que je comprends mais j'aimerais le mettre plutot dans path2

    je recupère bien mon path2 mais je ne sais pas comment envoyer mon fichier de sortie dans le path2

    si je ne suis pas claire dans mon explication, n'hésite pas .
    Merci

  6. #6
    Futur Membre du Club
    Inscrit en
    Août 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    voilà ce que je fais pour déplacer le fichier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    my $sortie_1="out_" .$filename ; 
    open (OUT, "> $sortie_1.txt") || die "Problem with the output file : $!";
    move("$sortie_1.txt","$InputDir")|| die "Problem to move output file : $!";
    $InputDir --> est bien le chemin ou je voudrais stocker mon fichier OUT
    (il se presente c:\documents and settings\desktop\)
    j'ai le message d'erreur suivant

    "permission denied in xxx.pl line 51 "

    qui correspond à mon move ()

    Je ne vois pas le problème

    Merci pour vos idées

  7. #7
    Futur Membre du Club
    Inscrit en
    Août 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    my $sortie_1="out_" .$filename ; 
    open (OUT, "> $sortie_1.txt") || die "Problem with the output file : $!";
    close OUT;
    move("$sortie_1.txt","$InputDir")|| die "Problem to move output file : $!";

    c'est bon, j'ai trouvé la solution
    pour ceux qui auront le même problème
    voir le code
    il faut juste mettre le close avant de move



  8. #8
    Membre expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Points : 3 284
    Points
    3 284
    Par défaut
    Citation Envoyé par maluv Voir le message
    voilà ce que je fais pour déplacer le fichier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    my $sortie_1="out_" .$filename ; 
    open (OUT, "> $sortie_1.txt") || die "Problem with the output file : $!";
    move("$sortie_1.txt","$InputDir")|| die "Problem to move output file : $!";
    $InputDir --> est bien le chemin ou je voudrais stocker mon fichier OUT
    (il se presente c:\documents and settings\desktop\)
    j'ai le message d'erreur suivant

    "permission denied in xxx.pl line 51 "

    qui correspond à mon move ()

    Je ne vois pas le problème

    Merci pour vos idées
    j'avais tres bien compris, et ma réponse ne change pas tu peux utiliser dirname décrit dans la même page que cité précédement.
    exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    my $in_file = "/foo/bar/baz.mac"
    my $filename = basename($in_file,  ".mac");
    my $dirname  = dirname($in_file);
    my $out_file= $dirname . "/out_" . $filename . ".txt";
    bazar: http://www.improetcompagnie.com/publ...ctacles-6.html

    BÉPO la disposition de clavier francophone, ergonomique et libre: http://bepo.fr/wiki/Accueil

    Emacs Wiki: http://www.emacswiki.org/

    En attente de ce que produira: http://www.pushmid.com

  9. #9
    Mr6
    Mr6 est déconnecté
    Membre éclairé

    Homme Profil pro
    Inscrit en
    Septembre 2004
    Messages
    607
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2004
    Messages : 607
    Points : 794
    Points
    794
    Par défaut
    comme on dit : TIMTOWTDI

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    path1/mon_script.pl path2/mon_fichier.dec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    my $file = $ARGV[0];
    open IN,$file..... #(j'abrège hein ^^)
    [traitement]
    $file =~ s/\.dec$/_out\.txt$/; #et on a le fichier de sortie
    @+
    Mr6

Discussions similaires

  1. Réponses: 4
    Dernier message: 28/05/2008, 18h43
  2. Réponses: 9
    Dernier message: 15/01/2006, 20h22
  3. Réponses: 2
    Dernier message: 06/12/2002, 07h50

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