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] lecture fichier entre ; et :


Sujet :

Langage Perl

  1. #21
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 98
    Points : 26
    Points
    26
    Par défaut
    Donc si mon .txt est :
    Professeur_Nom;Professeur_Prenom;Matiere;Classes
    Dupont;Hugues;Anglais;AMA 1
    Martin;Nicolas;Math;2 B
    ToTO;robert;Eco;AMA 2
    TiTI;fanny;EPS;TES
    Le code est si il y a des fautes de syntaxe ou autre dit le moi c'est pour voir si j'ai bien reformuler ce que tu ma proposer)
    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
     
    #!/usr/bin/perl -w
     
    use strict;
    use warnings;
    use Data::Dumper;
     
    my $InFile = "ENT_PROF.txt";
    open (InFile,"$InFile") or die "Can't open file\n";
    my $Ligne;
    my %Table;
     
    # Professeur_Nom;Professeur_Prenom;Matiere;Classes
    # lecture du fichier ligne par ligne
    while ($Ligne=<InFile>)
    {
     
            if($Ligne =~ /(\w*):(\w*):(\w*):(\w*)/)
            {
                    $Table{$1}{Professeur_Prenom}=$2;
                    $Table{$1}{Matiere}=$3;
                    $Table{$1}{Classes}=$4;
            }
    }
    close(InFile);
     
    # pour visualiser ton tableau globalement
    print Dumper (%Table);
     
     
    # Pour accéder à une valeur bien spécifique du tableau
    foreach my $Nom (keys %Table)
    {
            print "\nNOM =".$Nom."\n PRENOM =".$Table{$Nom}{Professeur_Prenom}."\n MATIERE =".$Table{$Nom}{Matiere}."\n CLASSE =".$Table{$Nom}{Classes}."\n";
    }
    Par contre je n'affiche rien (pas erreur non plus)

    D'avance Merci.
      0  0

  2. #22
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Un petit truc quand tu sembles ne rien récupérer de ton fichier : ajoute une impression de ta ligne à l'écran.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
            if($Ligne =~ /(\w*):(\w*):(\w*):(\w*)/)
            {
                    print $Ligne."\n";
                    $Table{$1}{Professeur_Prenom}=$2;
                    $Table{$1}{Matiere}=$3;
                    $Table{$1}{Classes}=$4;
            }
    ... en effet rien n'apparait à l'écran ce qui signifie que la condition du if n'est jamais rencontrée. Ton expression régulière est donc incorrecte. Ici, l'erreur est simple tu demandes au programme de trouver des : comme séparateur alors que tu utilises des ; dans ton fichier.

    Jasmine,
    -- Jasmine --
      0  0

  3. #23
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 98
    Points : 26
    Points
    26
    Par défaut
    $VAR27 = 'Dupont';
    $VAR28 = {
    'Matiere' => 'Anglais',
    'Classes' => 'AMA',
    'Professeur_Prenom' => 'Hugues'
    };
    $VAR29 = 'Martin';
    $VAR30 = {
    'Matiere' => 'Math',
    'Classes' => '2',
    'Professeur_Prenom' => 'Nicolas'
    ...
    Presque parfait Déjà un grand merci à toi pour ta patience et ton courage de me répondre hihi
    le seul bémol est pour la classe il me récupère pas entièrement peut être du à l'espace (2 au lieu de 2 A...)
      0  0

  4. #24
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Oui en effet, c'est l'espace qui pose problème tu dois écrire:
    [] signifie "ou" donc il cherche un espace ou un \w.

    Nb quand tu sais que tu n'as que des lettres, au lieu de \w tu peux mettre:

    Jasmine,
    -- Jasmine --
      0  0

  5. #25
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 98
    Points : 26
    Points
    26
    Par défaut
    Alala je vais craquer snif

    plusieurs souci pas très grave je pense mais les voilà

    classe peut contenir un point et des espace
    ex : T.SP ou 2 A

    le nom et prénom contient des lettres é è ï et des '
    ex:nom: l'ecoq
    prénom: Naïdja

    et pour la classe contient des espace et tout le reste
    ex:Spé-A.T.C ou D31 (économie)

    Donc cela va être plus dur que je ne pensé et c'est pour cela que je ne récupérer pas tout ma liste mais juste quelque un,
    Quel syntaxe utilisé?

    D'avance merci merci et encore merci
      0  0

  6. #26
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Pour le point il faut utiliser \. car . signifie n'importe quel caractère et non le point.
    Pour l'apostrophe, le tiret, tu peux les utiliser tel quel.
    Pour les accents, je ne sais pas mais va voir dans un tutoriel de ce forum ou du net.
    Pour les espaces, les tabulations... (tous les types d'espace mais pas le \n saut de ligne) : c'est \s.
    Donc en résumé quelque chose comme ça:

    ... et en beaucoup plus simple si tu es certaine que ton fichier est bien formaté utilise
    qui comme je l'ai dit plus haut récupèrera tout, y compris ta 1ère ligne.

    Allez courage, au début c'est toujours difficile...on a tous dû commencer un jour.

    Jasmine,
    -- Jasmine --
      0  0

  7. #27
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 98
    Points : 26
    Points
    26
    Par défaut
    L'extrait du résultat de l'affichage pour cette personne
    NOM =l'ecoq
    PRENOM =Naïdja
    MATIERE =T.AMG
    CLASSE =Biologie
    L'extrait du txt pour cette personne
    l'ecoq;Naïdja;1 AMG;Biologie
    l'ecoq;Naïdja;2 B;Biologie
    l'ecoq;Naïdja;2 B;EATCBIo
    l'ecoq;Naïdja;T.AMG;Biologie
    Il ne m'affiche que la dernier ligne pour chaque enseignants

    et même à l'affichage
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    print $Ligne."\n";
    Bizarre oO

    Allez courage, au début c'est toujours difficile...on a tous dû commencer un jour.
    Merci j'ai commencer il y a un mois donc faut que ça rentre au fur et à mesure juste des connaisances en C
      0  0

  8. #28
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Je ne savais pas que tu aurais plusieurs fois le même nom. En fait étant donné que les clés d'un tableau doivent être uniques, quand il la rencontre une seconde fois, le programme ne recrée pas une nouvelle entrée mais écrase les valeurs de l'entrée précédente correspondant à cette clé.

    Utilise une clé unique dans ton tableau (par exemple un tableau indexé). Ou alors il faut recommencer un autre tableau dont la clé concaténation "nom-prenom" à comme valeur une array listant les différents cours.
    ... cela dépend de ce que tu veux en faire après, les noms peuvent ils être concaténés aux prénoms?
    Du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                    my $cle = $1."_".$2."\n";
                    $Table{$cle}{COURS}= $3 mis dans une liste;

    Jasmine,
    -- Jasmine --
      0  0

  9. #29
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 98
    Points : 26
    Points
    26
    Par défaut
    A ok je comprend tout s'éclaircit

    mais je l'incorpore dans ma boucle while ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    while ($Ligne=<InFile>)
    {
     
            if($Ligne =~ /(.*);(.*);(.*);(.*)/)
            {
                    print $Ligne."\n";
                    my $cle = $1."_".$2."\n";
                    $Table{$cle}{Professeur_Prenom}=$2;
                    $Table{$cle}{Matiere}=$3;
                    $Table{$cle}{Classes}=$4;
            }
    }
    D'avance merci.
      0  0

  10. #30
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    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
    #!/usr/bin/perl -w
     
    use strict;
    use warnings;
    use Data::Dumper;
     
    my $InFile = "P:/Perl/scripts/Files/test.txt";
    open (InFile,"$InFile") or die "Can't open file\n";
    my $Ligne;
    my %Table;
     
    # lecture du fichier ligne par ligne
    while ($Ligne=<InFile>)
    {
             print $Ligne."\n";
            if($Ligne =~ /(.*);(.*);(.*);(.*)/)
            {
                    my $cle = $1."_".$2."\n";
                    push(@{$Table{$cle}{CLASSE}}, $3);
                    push(@{$Table{$cle}{COURS}}, $4);
            }
    }
    close(InFile);
     
    # pour visualiser ton tableau globalement
    print Dumper (%Table);
    -- Jasmine --
      0  0

  11. #31
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 572
    Points : 2 014
    Points
    2 014
    Par défaut
    Citation Envoyé par maloute80 Voir le message
    A ok je comprend tout s'éclaircit

    mais je l'incorpore dans ma boucle while ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    while ($Ligne=<InFile>)
    {
     
            if($Ligne =~ /(.*);(.*);(.*);(.*)/)
            {
                    print $Ligne."\n";
                    my $cle = $1."_".$2."\n";
                    $Table{$cle}{Professeur_Prenom}=$2;
                    $Table{$cle}{Matiere}=$3;
                    $Table{$cle}{Classes}=$4;
            }
    }
    D'avance merci.
    Tiens, on vient de se croiser autre part je crois

    Le soucis que je vois, c'est que tu risques d'écraser le contenu de la variable Matiere ($Table{$cle}{Matiere}), regarde ton fichier d'origine :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    l'ecoq;Naïdja;1 AMG;Biologie
    l'ecoq;Naïdja;2 B;Biologie
    l'ecoq;Naïdja;2 B;EATCBIo
    l'ecoq;Naïdja;T.AMG;Biologie
    D'autre part, es-tu sûr que $3 corresponde bien à la matière ? Moi, j'ai plutôt l'impression que $3 = la classe et que c'est $4 pour la matière
      0  0

  12. #32
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Voila pour consulter ce type de tableau
    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
    # Pour accéder à une valeur bien spécifique du tableau
    foreach my $Nom_Prenom (keys %Table)
    {
            print "\n\nNOM PRENOM =".$Nom_Prenom."\n";
            print "CLASSE(S)\n";
            foreach my $Classe (@{$Table{$Nom_Prenom}{CLASSE}})
            {
                    print "$Classe\n";
            }
            print "COURS\n";
            foreach my $Cours (@{$Table{$Nom_Prenom}{COURS}})
            {
                    print "$Cours\n";
            }
     
    }
    ... l'ennui est qu'il n'y a plus la correspondance classe-cours ... je suppose que tu en as besoin non?
    Je parle du tableau que je t'ai proposé.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                    push(@{$Table{$cle}{CLASSE}}, $3);
                    push(@{$Table{$cle}{COURS}}, $4);
    Enfin avec toutes ces informations tu devrais trouver la structure de tableau appropriée à ton problème.


    Jasmine,
    -- Jasmine --
      0  0

  13. #33
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 572
    Points : 2 014
    Points
    2 014
    Par défaut
    Citation Envoyé par Jasmine80 Voir le message
    ... l'ennui est qu'il n'y a plus la correspondance classe-cours ... je suppose que tu en as besoin non?
    Au contraire !

    L'indice 0 du tableau CLASSE contient la 1ère classe lue. L'indice 0 du tableau COURS contient le 1er cours lu. De là à penser qu'il y a un lien entre ces 2 éléments là...
      0  0

  14. #34
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    A oui, tu as raison, mais il faut être certain du format de fichier de départ ... c'est un peu dangereux non? Si seules 3 valeurs de la ligne sur les 4 sont récupérées ... cela provoquerait un décalage?

    Jasmine,
    -- Jasmine --
      0  0

  15. #35
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 572
    Points : 2 014
    Points
    2 014
    Par défaut
    Citation Envoyé par Jasmine80 Voir le message
    A oui, tu as raison, mais il faut être certain du format de fichier de départ ... c'est un peu dangereux non? Si seules 3 valeurs de la ligne sur les 4 sont récupérées ... cela provoquerait un décalage?

    Jasmine,
    Oui, mais à charge au programmeur de vérifier le nombre de valeurs qu'il récupère du fichier d'entrée
      0  0

  16. #36
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Moi, je n'aime pas trop ce genre de risque .
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    # Pour accéder à une valeur bien spécifique du tableau
    foreach my $Nom_Prenom (keys %Table)
    {
            print "\n\nNOM PRENOM =".$Nom_Prenom."\n";
            for(my $i=0; $i<@{$Table{$Nom_Prenom}{CLASSE}}; $i++)
            {
                    print "CLASSE\t".${$Table{$Nom_Prenom}{CLASSE}}[$i]."\n";
                    print "COURS\t".${$Table{$Nom_Prenom}{COURS}}[$i]."\n";
            }
    }
    Donc quelque chose comme cela?
    ... cela fait compliqué pour quelqu'un qui ne fait du perl que depuis un mois.


    Jasmine,
    -- Jasmine --
      0  0

  17. #37
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 572
    Points : 2 014
    Points
    2 014
    Par défaut
    Oui, ça m'a l'air d'être correct

    Pour le côté risque, ben comme je dis, à charge au programmeur de prévoir une bouée de sauvetage :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if($Ligne =~ /(.*);(.*);(.*);(.*)/)
    {
        # ici, la récupération des valeurs de la ligne lue
    }
    else
    {
        # ici, indiquer la nature du problème rencontré sur la ligne lue dans un log ?
    }
      0  0

  18. #38
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Tiens au fait Arioch ... sais-tu comment faire pour demander que la lecture d'un fichier ne commence qu'à la xième ligne? Et pour inclure des accents éèà dans une expression régulière? Maloute en aurait besoin dans ce script.


    Merci,


    Jasmine,
    -- Jasmine --
      0  0

  19. #39
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 572
    Points : 2 014
    Points
    2 014
    Par défaut
    Citation Envoyé par Jasmine80 Voir le message
    Tiens au fait Arioch ... sais-tu comment faire pour demander que la lecture d'un fichier ne commence qu'à la xième ligne? Et pour inclure des accents éèà dans une expression régulière? Maloute en aurait besoin dans ce script.


    Merci,


    Jasmine,
    Pour commencer la lecture à une ligne donnée, j'utiliserais la variable $. qui contient le n° de ligne du fichier en cours pour le faire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    # exemple de lecture d'un fichier ouvert sur handle TOTO à partir de la 25è ligne
    while(<TOTO>)
    {
        if ($. >= 25)
        {
            # TOUT ce qu'on doit faire sur la lecture du fichier se fait ici
        }
    }
    Quant aux accents, ben chez moi ceci fonctionne et c'est une expression régulière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $toto = "éééé";
    $toto =~ s/[éèê]/e/g;
    print "$toto\n"; # affiche eeee
      0  0

  20. #40
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 98
    Points : 26
    Points
    26
    Par défaut
    Pour conclure tout ça je remet le script plus clairement en entier ^^
    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
    42
    43
    44
    45
    46
    47
     
    #!/usr/bin/perl -w
     
    use strict;
    use warnings;
    use Data::Dumper;
     
    my $InFile = "ENT_PROF.csv";
    open (InFile,"$InFile") or die "Can't open file\n";
    my $Ligne;
    my %Table;
     
    # Professeur_Nom;Professeur_Prenom;Classes;Matiere
    # lecture du fichier ligne par ligne
    while ($Ligne=<InFile>)
    {
    # lecture d'un fichier à partir de la 1er ligne
        if ($. >= 1)
        {
            if($Ligne =~ /(.*);(.*);(.*);(.*)/)
            {
                print $Ligne."\n";
                my $cle = $1."_".$2."\n";
                push(@{$Table{$cle}{Classes}}, $3);
                push(@{$Table{$cle}{Matiere}}, $4);
            }
            else
            {
                print("Erreur lecture de ligne");
            }
        }
    }
    close(InFile);
     
    # pour visualiser ton tableau globalement
    print Dumper (%Table);
     
    # Pour accéder à une valeur bien spécifique du tableau  
    foreach my $Nom_Prenom (keys %Table)
    {
            print "\n\nNOM PRENOM = " .$Nom_Prenom."\n";
            for(my $i=0; $i<@{$Table{$Nom_Prenom}{Classes}}; $i++)
            {
                    print "Classes\t".${$Table{$Nom_Prenom}{Classes}}[$i]."\n";
                    print "Matiere\t".${$Table{$Nom_Prenom}{Matiere}}[$i]."\n";
            }
    }
    exemple de résultat :
    NOM PRENOM = MARTIN_RENE

    Classes 1 ANG
    Matiere Informatique
    Classes 2 A
    Matiere Informatique
    Mais voila une autre question hihi
    Arioch et Jasmine80 dit
    citation :
    Ho NON !!! pas encore !!


    Voila si je veut maintenant chercher dans le tableaux et en retirer les information plus précisément
    Je cherche MR Martin Rene
    je l'est mit dans ma variable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    my $tmpname="MARTIN_RENE";
    est-ce possible de rechercher cela dans le tableaux et en afficher comme cela
    ENS=MARTION_RENE
    MATIERE=INFORMATIQUE pour les classes 2 A, ANG
    Merci à vous deux pour toute l'aide apporter et surtout les explications
      0  0

Discussion fermée
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 8
    Dernier message: 25/02/2009, 15h52
  2. Problème Lecture fichier
    Par Gebudi. dans le forum C++
    Réponses: 1
    Dernier message: 29/05/2006, 08h37
  3. problème lecture fichier
    Par Pleymo dans le forum Langage
    Réponses: 2
    Dernier message: 23/11/2005, 09h00
  4. [SAX] Problème lecture fichier xml
    Par BernardT dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 07/07/2005, 18h11
  5. Problème lecture fichier en C++
    Par cali1983 dans le forum C++
    Réponses: 17
    Dernier message: 20/05/2005, 09h36

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