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 :

ajout de lignes avant la ligne d'après dans un fichier


Sujet :

Langage Perl

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 47
    Points : 29
    Points
    29
    Par défaut ajout de lignes avant la ligne d'après dans un fichier
    Bonjour,

    Sauriez-vous en perl, comment ajouter dans un fichier, des lignes avant la ligne d'après ?
    Pour être plus précis, j'ai un fichier initial et un fichier final avec les modifications (ajout des lignes avant une autre ligne) :

    fichier initial : texte_debut.txt
    [TITRE1]

    [/TITRE1]

    [SOUS_PARAGRAPHE]
    La table a été déplacée.
    Un nouveau meuble est installé.
    [/SOUS_PARAGRAPHE]

    [TITRE2]

    [/TITRE2]

    ************************
    fichier d'arrivée : texte_final.txt
    [TITRE1]

    [/TITRE1]

    [PARAGRAPHE]
    Le soleil se lève.
    [/PARAGRAPHE]

    [SOUS_PARAGRAPHE]
    La table a été déplacée.
    Un nouveau meuble est installé.
    [/SOUS_PARAGRAPHE]

    [TITRE2]

    [/TITRE2]

    ************************

    Je veux en perl, ajouter avant la balise [SOUS_PARAGRAPHE] le texte :
    [PARAGRAPHE]
    Le soleil se lève.
    [/PARAGRAPHE]

    Je pense lire le fichier initial, faire les modifications en mémoire puis copier le tout dans un autre fichier.
    Le problème, c'est que je ne sais pas comment dire en perl :

    dès que perl voit la ligne [SOUS_PARAGRAPHE], ajouter juste avant ça, le texte suivant :
    [PARAGRAPHE]
    Le soleil se lève.
    [/PARAGRAPHE]

    Merci de votre aide.

  2. #2
    Membre averti
    Avatar de magicshark
    Homme Profil pro
    Dans une SS2I donc pas que JAVA
    Inscrit en
    Octobre 2011
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dans une SS2I donc pas que JAVA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2011
    Messages : 133
    Points : 320
    Points
    320
    Par défaut
    Euh tu peux être plus claire car là je vois que ton texte dans paragraphe devient le texte dans sous paragraphe et vice versa.

    du coup si c'est toujours ça tu peux faire :

    Si c'est exactement comme écrit :
    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
    use strict;
    open (my $fic,"<","./paragraphe_sousparagraphe.txt") or die "pas possible";
    open (my $ficout,">","./paragraphe_sousparagrapheOUT.txt") or die "pas possible";
    my $text =<<'FIN_PARA';
    [PARAGRAPHE]
    Le soleil se lève.
    [/PARAGRAPHE]
    FIN_PARA
     
    while(my $l = <$fic>){
        if($l =~ s/\[PARAGRAPHE\]/\[SOUS_PARAGRAPHE\]/){
            print {$ficout} $text;
            print {$ficout} $l;
        }else{
            $l =~ s/\[\/PARAGRAPHE\]/\[\/SOUS_PARAGRAPHE\]/;
            print{$ficout} $l;
        }
    }
     
    close $fic;
    close $ficout;
    devrait fonctionner
    Pourquoi faire simple quand on peut faire compliqué.

  3. #3
    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
    Points : 12 469
    Points
    12 469
    Billets dans le blog
    1
    Par défaut
    Je n'ai pas l'impression que c'est ce que demande crow56. Il me semble qu'il veuille juste ajouter les trois lignes suivantes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    [PARAGRAPHE]
    Le soleil se lève.
    [/PARAGRAPHE]
    avant l'occurrence de [SOUS-PARAGRAPHE]. Du coup, les substitutions seraient en trop. En reprenant seulement la boucle while de ton code, il faudrait peut-être ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    while (my $l = <$fic>) {
        if ($l =~ (/\[PARAGRAPHE\]/) {
            print $ficout $text;
        }
        print $ficout $l;
    }

  4. #4
    Membre averti
    Avatar de magicshark
    Homme Profil pro
    Dans une SS2I donc pas que JAVA
    Inscrit en
    Octobre 2011
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dans une SS2I donc pas que JAVA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2011
    Messages : 133
    Points : 320
    Points
    320
    Par défaut
    Effectivement après que l'auteur est éditer son fichier je comprend mieux le problème donc oui ta solution est mieux.
    Pourquoi faire simple quand on peut faire compliqué.

Discussions similaires

  1. Réponses: 2
    Dernier message: 19/11/2010, 12h17
  2. Réponses: 0
    Dernier message: 25/07/2010, 17h22
  3. Réponses: 8
    Dernier message: 11/12/2007, 17h04
  4. Comment prendre la ligne d'apres dans un fichier..
    Par Pauli dans le forum Langage
    Réponses: 7
    Dernier message: 01/02/2007, 19h12

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