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 :

Probleme de substitution


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 63
    Par défaut Probleme de substitution
    Hello

    Voici mon probleme:

    J'ai mon fichier source qui ressemble à ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    {SndEventE:(MATHIEU)
         SetName("DEL_Play_Og_Beo_Eff_Medium")
         SetMachin("TRUE")     
         SetParam1(201_Beowulf_Efforts.csb^SndResourceE:9)
         SetReverb("TRUE")
         SetBalance("TRUE")
         SetTruc("TRUE")
         SetVersion(18)     
    }
    et mon fichier destination:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    {SndEventE:(MATHIEU)
         SetName("DEL_Play_Og_Beo_Eff_Medium")        
         SetParam1(201_Beowulf_Efforts.csb^SndResourceE:9)
         SetReverb("TRUE")
         SetBalance("TRUE")     
         SetVersion(18)     
    }
    Ceci n'est qu'un exemple simple, car ces fichiers peuvent contenir plusieurs blocs de ce genre.
    Je souhaiterais donc remplacer les blocs se trouvant dans destination par les blocs de meme noms se trouvant dans source.
    Pour cela j'ai fait ce code tout bâteau:
    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
     
      # recupere dans $temp le fichier destination
      open DEST, "<$_file";
        while($line = <DEST>)
        {
          $temp = $temp . $line;
        }
      close DEST;  
     
      # recupere dans $temp2 le bloc de source que je voudrais remplacer dans destination  
      foreach $b(@_block)
      {
        $temp2 = $temp2 . $b;
      }
     
      # $_blockTitle contient le titre du bloc (la premiere ligne en l'occurence)
      $_blockTitle = quotemeta($_blockTitle) ;
     
      # et là je fais le switch qui consiste à remplacer tout ce qui se trouve entre la premiere ligne (celle-ci comprise) et le dernier backslash trouvé
      $temp =~ s/^$_blockTitle.*\}/$temp2/;
      print "$temp";
    Le probleme est que quand j'affiche $temp, bah rien n'a été remplacé.

    Si vous avez une idée... merci

    Mat'

  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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $temp =~ s/^$_blockTitle.*?\}/$temp2/s;
    Le modificateur /s est nécessaire, sinon '.' ne matchera pas les fins de lignes.
    Le *? est préférable au * s'il y a plusieurs blocs dans $temp, pour éviter que plusieurs blocs soient remplacé en même temps. Néanmoins, ton script me paraît légèrement curieux.
    Apparemment, ce que tu souhaiterais, serait une sorte de "mise à jour" des blocs présents dans la destination par ceux présent dans la source ? Dans ce cas il y a sans doute mieux à faire, quelle taille font tes fichiers ?

    --
    Jedaï

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 63
    Par défaut
    Merci pour ta reponse rapide, je vais essayer tes conseils dès maintenant.

    Mes fichiers peuvent atteindre quelques dizaines de ko, chacun contenant beaucoup de blocs du genre décrit plus haut.

    Pour être précis, voici exactement ce que dois faire mon script:
    Comparer les fichiers sources et les fichiers destination. Si le fichier n'existe pas, il est copié entierement.
    Si il existe, on regarde bloc par bloc et on ajoute les blocs manquants (jusque là ca va). Si le bloc existe, on le met à jour comme tu dis SAUF que certains des paramètres ne doivent pas être écrasés. Par exemple (et ce n'est qu'un exemple), le parametre SetBalance doit conserver la valeur indiquée dans le bloc du fichier destination, alors que les autres parametres du bloc doivent être mis à jour.
    Enfin, si un bloc est dans le fichier de destination mais pas dans le source, celui-ci est supprimé.

    Voila... C'est une sorte de merge conditionnel on va dire.
    Si tu as des conseils pour faire plus simple que ce que j'ai commencé, je les prends volontiers

    Merci
    Mathieu

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 63
    Par défaut
    EKSELAN !! ca fonctionne parfaitement rien qu'en rajoutant ce /s

    Si tu as d'autres conseils, je suis quand meme preneur. Mais deja merci

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

Discussions similaires

  1. Regex substitution probleme
    Par leilan dans le forum Langage
    Réponses: 17
    Dernier message: 17/10/2014, 14h20
  2. Probleme Substitution - Commande Sd (bash)
    Par pachalcs dans le forum Linux
    Réponses: 2
    Dernier message: 14/04/2012, 00h17
  3. probleme de substitution et meta-caractere
    Par zonttt dans le forum Langage
    Réponses: 2
    Dernier message: 30/01/2009, 10h28
  4. [langage] Problème de substitution
    Par telecnop dans le forum Langage
    Réponses: 4
    Dernier message: 25/07/2003, 10h00
  5. [Kylix] Probleme d'execution de programmes...
    Par yopziggy dans le forum EDI
    Réponses: 19
    Dernier message: 03/05/2002, 14h50

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