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 :

Problème de transformation de lignes en colonnes


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2010
    Messages : 8
    Par défaut Problème de transformation de lignes en colonnes
    Bonjour à toutes et tous,

    Je voudrais transformer, par un script perl,

    ceci:

    Flag
    Léon
    Blabla

    Flag
    FATIM Zhara
    bli BLI

    Flag
    Jean STANISLAS dit ChArLeS
    BLU bLop

    en cela (Tableau à 2 colonnes, que je ne parviens pas à représenter ici)

    Le but est d'intégrer ces données dans une table Access.

    Exprimé autrement, je voudrais que:

    Le contenu de la ligne qui suit chaque Nom et/ou Prénom soit transféré à côté de ce Nom et/ou prénom.




    Léon Blabla

    FATIM Zhara bli BLI

    Jean STANISLAS dit ChArLeS BLU bLop



    Pourriez vous me conseiller ?

    Merci.

    A bientôt.

    Roland - Bruxelles.

  2. #2
    Membre chevronné Avatar de iblis
    Inscrit en
    Janvier 2007
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 59

    Informations forums :
    Inscription : Janvier 2007
    Messages : 510
    Par défaut
    Une façon de faire :

    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
    22
    23
    24
    25
    #!/usr/bin/perl
    use strict; use warnings;
     
    while(<DATA>) {
      if (my $flag = /^Flag$/ .. /^$/) {
        s/\n/ / unless $flag =~ /E0$/;
        print   unless $flag =~ /^1$/;
      }
    }
     
    __DATA__
    Flag
    Léon
    Blabla
     
    noise
    noise
     
    Flag
    FATIM Zhara
    bli BLI
     
    Flag
    Jean STANISLAS dit ChArLeS
    BLU bLop
    On teste si on est bien entre les balises choisies (/^Flag$/ pour le début et ligne vide /^$/ pour la fin) avec l'opérateur .. qui fonctionne comme un interrupteur à bascule qui est faux (vide puis nul) hors des balises et vrai dedans (où il maintient un compteur et un indicateur de fin).

    Ensuite, on remplace les \n par " " pour toutes les lignes sauf la dernière. On ignore la première ligne (là où le compteur vaut 1).

    Regarde perldoc perlop pour le détail sur le range operator (..).

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2010
    Messages : 8
    Par défaut Remerciements à Iblis.
    Cher Iblis,

    Mille mercis pour votre aide précieuse.

    Cela m’a permis d’écrire un petit script qui correspond plus à ma demande.

    Il n’est pas tout à fait élégant, il reste un « Balise » au début du fichier de
    sortie et un « Balise » de moins à la fin de ce fichier.

    Je ne vais pas en faire un drame, je suis déjà tout content comme cela.

    Merci encore.

    Portez vous bien.

    Roland – Bruxelles.

    -----------------

    Mon fichier "entrée" se nomme : lignes.txt

    BALISE
    Nom_A
    Adresse_A
    Tel_A
    BALISE
    Nom_B
    Adresse_B
    Tel_B
    BALISE
    Nom_C
    Adresse_C
    Tel_C

    Le script est:

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    use strict;
    use warnings;
     
    my $line;
     
    open FICHIER,"< lignes.txt" or die "Le fichier n'existe pas !";
    open WRITER,"> colonnes.txt" or die "Le fichier ne peut être édité !\n";
     
    my $i = 0;
     
    while (my $line =<FICHIER>) {
     
    	if ($line=~/BALISE/){
     
    		$i=0;
     
    	}
    	 elsif ($i<=3) {
     
    		$line =~ s/\n/\t/;
    	 }   
     
    	print  "$line" ; 
     
    	print WRITER "$line";
     
    ++$i; 
     
    }
     
    close FICHIER;
    close WRITER;
    Le fichier "résultat" se nomme : colonnes.txt

    BALISE
    Nom_A Adresse_A Tel_A BALISE
    Nom_B Adresse_B Tel_B BALISE
    Nom_C Adresse_C Tel_C

    A bientôt.

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

Discussions similaires

  1. Transformer des lignes en colonnes
    Par Gomoz dans le forum Requêtes
    Réponses: 1
    Dernier message: 17/02/2009, 18h55
  2. Transformer des lignes en colonne DataStage
    Par bnet2 dans le forum DataStage
    Réponses: 4
    Dernier message: 09/12/2008, 11h07
  3. Transformer des lignes en colonnes
    Par ofinot dans le forum Requêtes et SQL.
    Réponses: 15
    Dernier message: 30/07/2008, 12h45
  4. Transformer les lignes en colonnes
    Par metalcoyote dans le forum Autres Logiciels
    Réponses: 2
    Dernier message: 23/02/2007, 10h45
  5. TRANSFORM et PIVOT? Transformer les lignes en colonnes
    Par capitaine dans le forum Access
    Réponses: 1
    Dernier message: 12/07/2006, 12h53

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