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 :

Remplacement dans un fichier avec des parentheses et des quotes


Sujet :

Langage Perl

  1. #1
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 25
    Points : 17
    Points
    17
    Par défaut Remplacement dans un fichier avec des parentheses et des quotes
    Bonjour à tous.

    Voila j'ai un fichier python contenant des listes de la forme: ["machin","machin2","machin3",...]

    Je souhaiterais remplacer ["machin","machin2","machin3",...] par ["machin",_("machin2"),_("machin3"),...]

    Je suis en train d'essayer avec un script utilisant une expression régulière du type:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    #!/usr/bin/perl -w
    while(<>)
    {
         s/"(.*)"/_("$1")/g
    }
    Seulement, ça ne marche pas !!
    Et ça devrais modifier aussi le premier élément de la liste ce que je ne souhaite pas.

    Pour éviter que ça modifie le premier élément de la liste j'avais dans l'idée d'utiliser quelque chose dans le style mais je n'arrive pas à le faire fonctionner.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    s/["(.*)"(,"(.*)")+]/_("$2")/g
    Si quelqu'un a une idée ...

    Merci.

  2. #2
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #!/usr/bin/perl
     
    use strict;
    use warnings;
     
     
    my $string = '["machin","machin2","machin3","machin4"]';
    $string =~ s/,"(.*?)"/,_\("$1"\)/g;
     
    print $string."\n";
    # affiche  ["machin",_("machin2"),_("machin3"),_("machin4")]
    Tu n'étais pas loin de la solution. Il faut utiliser un point d'interrogation afin de rendre la recherche non gourmande et un antislash devant tes parenthèses car celles-ci sont des caractères réservés aux Exp Reg.

    Pour éviter la première valeur, sers toi de la virgule qui précède toutes les autres valeurs de ta liste.
    -- Jasmine --

  3. #3
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 25
    Points : 17
    Points
    17
    Par défaut
    Merci beaucoup, je n'avais pas pensé à cette possibilité.

    Je me pose encore une petite question:
    Comment pourrais-je faire ce meme travail si il y à un retour à la ligne entre chaque "machinX" à mettre sous forme de _("machinX") ?

    D'avance merci

  4. #4
    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
    Citation Envoyé par Radec Voir le message
    Je me pose encore une petite question:
    Comment pourrais-je faire ce meme travail si il y à un retour à la ligne entre chaque "machinX" à mettre sous forme de _("machinX") ?

    D'avance merci
    Si tes valeurs étaient dans une variable, ça serait simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    my $string = qq{["machin"\n,"machin2"\n,"machin3"\n,"machin4"]};
    # suppression des enter et mise entre parenthèses de chaque valeur excepté la première
    $string =~ s/\n,"(.*?)"/,_\("$1"\)/g;
    As-tu déjà récupérer tes listes dans des scalaires?
    Ou alors as-tu plusieurs listes de valeurs écrites sur plusieurs lignes d'un fichier? Si oui, pourrais-tu en préciser la structure exacte?

    Merci,
    -- Jasmine --

Discussions similaires

  1. Écrire dans un fichier avec des accents
    Par lostsoul dans le forum Débuter
    Réponses: 8
    Dernier message: 22/04/2012, 10h15
  2. Réponses: 3
    Dernier message: 30/03/2011, 14h47
  3. Réponses: 1
    Dernier message: 04/06/2010, 12h10
  4. Faire des remplacements dans un fichier texte
    Par DooSquare dans le forum C
    Réponses: 6
    Dernier message: 06/07/2007, 19h22
  5. enregistrer dans un fichier avec une appli mdi
    Par ferrari dans le forum C++Builder
    Réponses: 4
    Dernier message: 05/05/2002, 16h17

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