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

Programmation et administration système Perl Discussion :

Nouveau Fichier lorsqu'un nouveau caractère est rencontré dans une colonne


Sujet :

Programmation et administration système Perl

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Janvier 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Janvier 2015
    Messages : 9
    Points : 5
    Points
    5
    Par défaut Nouveau Fichier lorsqu'un nouveau caractère est rencontré dans une colonne
    Bonjour a tous je cherche un script perl pour réalisé un nouveau fichier a chaque fois que l'on rencontre une nouvelle donée dans une colonne définit

    par exemple:

    fichier1

    A 1 3
    A 1 4
    B 6 9
    B 7 8

    lancement du script crée deux nouveaux fichiers

    fichier 2 fichier3

    A 1 3 B 6 9
    A 1 4 B 7 8

    Un petit coup de main ? merci d'avance =)

  2. #2
    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
    Bonjour,

    je ne comprends pas bien ton exemple. Quelle est la colonne dans laquelle l'appafrition d'une nouvelle donnée doit provoquer l'ouverture d'un nouveau fichier?

    Et que contiennent les fichiers 2 et 3? Ta mise en page ne l'indique pas clairement à mes yeux.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Janvier 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Janvier 2015
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Donc je vais essayer de mieux l'expliquer, le script doit porter uniquement sur la première colonne: a chaque fois qu'il rencontre une nouvelle donnée celle-ci est enregistrée dans un fichier.

    ex fichier de base:

    x1 x2 x3
    a 1 1
    b 1 1
    a 2 2
    c 1 1
    b 3 3

    on rencontre trois différentes variables,les lignes liées a ces variables doivent donc être exporté dans un fichier:

    Fichier a contient toutes les lignes commençant par a, exemple du contenu du fichier: a 1 1
    Fichier b contient toutes les lignes commençant par b exemple du contenu du fichier: b 1 1
    Fichier c contient toutes les lignes commençant par c exemple du contenu du fichier : c 1 1

    j'espère je suis plus clair

  4. #4
    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
    Bonjour,

    tu peux construire un hachage de descripteurs de fichier (un descripteur par lettre de l'alphabet). Ensuite tu écris dans le descripteur correspondant à la bonne lettre:

    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;
    use warnings;
     
    my %descr;
     
    for ('a'..'d') {
        my $name = "lettre_$_";
        open my $FH, ">", $name or die "Ouverture impossible de $name $!";
        $descr{$_} = $FH;
    }
    while (<DATA>) {
        my $lettre = substr $_, 0, 1;
        print {$descr{$lettre}} $_;
    }
     
    __DATA__
    a 1 1
    b 1 1
    a 2 2
    c 1 1
    b 3 3
    Cela a créé quatre fichiers :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $ls -lrt lettre*
    -rw-r--r-- 1 prod dqd   0 2015-01-28 17:19 lettre_d
    -rw-r--r-- 1 prod dqd   6 2015-01-28 17:19 lettre_c
    -rw-r--r-- 1 prod dqd  11 2015-01-28 17:19 lettre_b
    -rw-r--r-- 1 prod dqd  12 2015-01-28 17:19 lettre_a
    17:32:51[/exec/applis/prod/ROL]$cat lettre_a
    a 1 1
    a 2 2
    Remplace
    par
    et ça te créera 26 fichiers.

  5. #5
    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
    Voici deux autres façons de faire la même chose.

    1. Toujours avec un hachage de file handles:
    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
     
    use strict;
    use warnings;
     
    my %handles;
    $handles{$_} = create_fh($_) for ('a'..'z');
    while (<>) {
            print { $handles{$1} } $_ if (/^([a-z])/) ;
    }
     
    sub create_fh {
            my $letter = shift;
            my $file_name = "lettre_$letter.txt";
            open my $FH, ">", $file_name or die "ouverture impossible de $file_name $!";
            return $FH;
    }
    2. En utilisant une table de distribution, c'est-à-dire un hachage de fonctions anonymes (attention: il s'agit ici de concepts un peu plus avancés, c'est peut-être un peu compliqué si tu débutes en Perl):
    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
     
    use strict;
    use warnings;
     
    my %dispatch;
    $dispatch{$_} = create_sub($_) for ('a'..'z');
    while (<>) {
            $dispatch{$1}->($_) if (/^([a-z])/) ;
    }
     
    sub create_sub {
            my $letter = shift;
            my $file_name = "lettre_$letter.txt";
            open my $FH, ">", $file_name or die "ouverture impossible de $file_name $!";
            return sub { my $line = shift; print $FH $line; }
    }

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Janvier 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Janvier 2015
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Je n'ai jamais programmé en perl donc merci pour toutes ces propositions, je trouve ça beaucoup plus compliqué que le bash. exemple pour faire la même chose sa me prend une ligne, c'est peut être que je ne suis pas habitué, je vais travaillé dessus en tous cas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #! /bin/bash
     
    log="test.log"
     
    awk 'NR>1{print >$1}' $log
    Merci a toi encore d'avoir pris le temps !
    @+

Discussions similaires

  1. [Batch] Vérifier si une chaine de caractères est présente dans un fichier
    Par jp_____ dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 23/08/2013, 10h40
  2. [XL-2007] ouverture d'un formulaire lorsqu'un mot précis est sélectionné dans une liste
    Par blackstrange dans le forum Macros et VBA Excel
    Réponses: 127
    Dernier message: 22/06/2012, 15h40
  3. Vérifier si une chaîne de caractère est contenu dans une autre
    Par Marvelll dans le forum Débuter avec Java
    Réponses: 7
    Dernier message: 22/02/2010, 14h54
  4. Réponses: 2
    Dernier message: 28/08/2006, 15h00
  5. Réponses: 2
    Dernier message: 13/08/2006, 23h56

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