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 :

occurence notes pour groupe d'élèves


Sujet :

Langage Perl

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 87
    Points : 59
    Points
    59
    Par défaut occurence notes pour groupe d'élèves
    Bonjour à tous,

    Je dispose d'un fichier texte sous cette forme:

    2 - 9
    7 - 7
    12 - 8
    15 - 6
    17- 7
    2 - 9
    12 - 4
    7 - 5
    15 - 1
    17- 9
    14 - 3
    17 - 9
    8 - 2
    12 - 9
    7 - 7
    17- 6
    15 - 7
    32- 4
    33 - 8
    2 - 5
    La premier nombre de chaque ligne est l'identifiant des élèves (de toute l'école), le deuxième nombre représente les notes (de 1 à 10) dans différentes matières.

    Je voudrais compter le nombre de chaque note non pas pour chaque élève mais pour chaque groupe d'élève (chaque classe).

    Par exemple; je veux compter le nombre d'attribution de chaque notes des élèves 2,7 et 12.

    resultat : note 9 = 3 fois, note 7 = 2 fois, note 8= 1 fois, note 4= 1 fois, note 5= 2 fois

    Comment est ce que je peux faire ça en perl?

    Merci d'avance pour votre aide

  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 256
    Points
    12 256
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    ça peut être fait au fil de l'eau en lisant le fichier, mais j’opterais plutôt le chargement des données du fichier dans une structure de données appropriée facilitant ensuite les recherches, par exemple un hachage de tableaux (hash of arrays, ou HoA), avec l'identifiant de l'élève comme clef et un tableau anonyme de notes comme valeur.

    En supposant que tu aies déjà ouvert le fichier avec le handle $IN (code rapide non testé, je n'ai pas Perl installé sur ma tablette):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    my %HoA;
    while (<$IN>) {
        chomp;
        my ($id, $note) = split /[-\s]+/, $_;
        push @$HoA{$id}, $note;
    }
    Ensuite, pour accéder aux notes, quelque chose comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for my $id (2, 7, 12) {
         print "@$HoA{$id}\n";
    }

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 87
    Points : 59
    Points
    59
    Par défaut
    Merci Lolo78 pour ta réponse

    J'ai exécuté ce code
    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
    #!/usr/bin/perl
    use strict;
    use warnings;
     
    use Statistics::Basic qw/:all/;
     
     
    my $file = 'data.txt';
    open my $fh, "<", $file or die "can't open < $file: $!";
     
    my %HoA;
    while (my $ligne = <$fh>) {
        chomp;
        my ($id, $note) = split /[-\s]+/, $_;
        push @$HoA{$id}, $note;
    }
    et j'ai eu cette erreur
    Global symbol "$HoA" requires explicit package name at C:\FTRD\test\test.pl line 15

  4. #4
    Membre éprouvé Avatar de Gardyen
    Homme Profil pro
    Bio informaticien
    Inscrit en
    Août 2005
    Messages
    637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bio informaticien

    Informations forums :
    Inscription : Août 2005
    Messages : 637
    Points : 1 050
    Points
    1 050
    Par défaut
    petit oubli d'accolades
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    push @{$HoA{$id}}, $note;
    Nous les geeks, c'est pas qu'on a une case en moins, c'est juste qu'on compte à partir de zéro.
    Plus les choses changent, plus elles restent les mêmes

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 87
    Points : 59
    Points
    59
    Par défaut
    Parfait (y)
    Merci Lolo78 et Gardyen.

  6. #6
    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 256
    Points
    12 256
    Billets dans le blog
    1
    Par défaut
    Bonjour devhercule,

    tu as modifié le code et introduit une erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    while (my $ligne = <$fh>) {
        chomp;
        my ($id, $note) = split /[-\s]+/, $_;
    Tu lis ta ligne dans $ligne, et tu chompes et splittes $_.

    En corrigeant les accolades qui manquaient dans ma ligne push, j'obtiens ce programme:

    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
    33
    34
    35
    36
    37
    38
     
    use strict;
    use warnings;
    use Data::Dumper;
     
    # my $file = 'data.txt';
    # open my $fh, "<", $file or die "can't open < $file: $!";
     
    my %HoA;
    while (<DATA>) {
        chomp;
        my ($id, $note) = split /[-\s]+/, $_;
        push @{$HoA{$id}}, $note;
    }
     
    print Dumper \%HoA;
     
    __DATA__
    2 - 9
    7 - 7
    12 - 8
    15 - 6
    17- 7
    2 - 9
    12 - 4
    7 - 5
    15 - 1
    17- 9
    14 - 3
    17 - 9
    8 - 2
    12 - 9
    7 - 7
    17- 6
    15 - 7
    32- 4
    33 - 8
    2 - 5
    Et cela m'affiche la structure de donnée à utiliser ensuite:
    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
    $VAR1 = {
              '33' => [
                        '8'
                      ],
              '32' => [
                        '4'
                      ],
              '7' => [
                       '7',
                       '5',
                       '7'
                     ],
              '17' => [
                        '7',
                        '9',
                        '9',
                        '6'
                      ],
              '12' => [
                        '8',
                        '4',
                        '9'
                      ],
              '2' => [
                       '9',
                       '9',
                       '5'
                     ],
              '14' => [
                        '3'
                      ],
              '15' => [
                        '6',
                        '1',
                        '7'
                      ],
              '8' => [
                       '2'
                     ]
            };

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 87
    Points : 59
    Points
    59
    Par défaut
    Ah oui tu as raison Lolo78

    Merci

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 21/11/2005, 15h42
  2. Ouvrir Lotus Notes pour envoi d'état
    Par nbelg27 dans le forum Access
    Réponses: 1
    Dernier message: 15/09/2005, 21h12

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