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 :

Tableau double dimensions avec taille de lignes différentes et inconnues


Sujet :

Langage Perl

  1. #1
    Membre actif

    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2013
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2013
    Messages : 87
    Points : 217
    Points
    217
    Par défaut Tableau double dimensions avec taille de lignes différentes et inconnues
    Bonjour
    SVP je suis débutante en perl, et j'aimerai faire un petit bout de code qui me permettra de stocker des données sous forme d'un tableau de deux dimensions.
    J'ai essayé les tables de hashage. Mais je m'en sort très mal!

    Outre que je débute en perl, ce qui est contraignant davantage c'est que je n'ai pas la taille max de chaque ligne de mon tableau.
    c'est en parcourant un fichier que je vais renseigner dans le tableau les données N et leurs données P corespondantes.
    J'ai fait le code ci dessous. SVP, dites moi est ce que ceci est correcte? et comment pourrais je afficher ce tableau puisque je ne connais pas les dimensions (le nombre de données P par N)
    Pour l'affichage je me suis basée sur la discussion Comment faire une matrice? mais ça marche pas, je pense que j'ai pas bien compris ce qu'il faut faire!
    Par avance merci de votre aide!
    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
     
    my %N_P_Data = (); 
     
                while (condition) 
                     {  
                        if (condition) 
                        {   
                            $p = 0;
                            $n++; 
                        }
                        elsif(condition) 
                        {
                            $N_P_Data{$n-1}{$p} = $input_p;#ceci me permettera d'avoir une liste ayant cela  
                                                                              #pour n=0; j'ai p =0...p=n
                            $p++;                                         #pour n=1; j'ai p =0...p=k et ainsi de suite jusqu'à la fin de mon fichier
                        }
    affichage:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    for (my $N_data=0;$N_data<$N_max;$N_data++) 
            {
                    foreach my $P_data ({$N_P_Data{$N_data}})
                    {
                            print " $N_P_Data{$N_data}{$P_data} \n";
                    }
            }
    cordialement,
    Nejma

  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 Nejma,

    Hum, je n'ai pas tout compris, il faudrait peut-être que tu donnes un exemple de tes données et explique exactement ce que tu cherches à faire: créer la structure de données ou seulement l'afficher?

    Cependant, deux points qui peuvent t'aider.

    Si tes indices sont compris entre 0 en N, alors il faut certainement utiliser un tableau au lieu d'un hachage.

    Pour visualiser ta structure, le module core Data:umper est sans doute une bonne solution.

  3. #3
    Membre actif

    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2013
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2013
    Messages : 87
    Points : 217
    Points
    217
    Par défaut
    Bonjour Lolo78,
    Merci beaucoup pour ta réponses
    voilà un exemple de mon fichier. J'ai besoin de ranger ce fichier dans une donnée qui me permettera de localiser pour chaque N_data_x les P_data_y correspondants. Et pour l'affichage je n'en ai pas vraiment besoin mais j'affiche juste pour tester que mes données sont remplies.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    N_data_0:
       P_data_1
       P_data_2
       P_data_3
       P_data_4
       P_data_5
       P_data_6
    N_data_1
       P_data_1
       P_data_2
    N_data_1
       P_data_1
       P_data_2
    Citation Envoyé par Lolo78 Voir le message

    Si tes indices sont compris entre 0 en N, alors il faut certainement utiliser un tableau au lieu d'un hachage.
    Est ce que je peux utiliser un tableau même si je connais pas le nombre de données que je vais y mettre? car il me semble qu'avec une table de hash je pourrais faire comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    while (condition) 
           {  
                        if (ma_ligne contient N_data_) 
                        {   
                            $p = 0;
                            $n++; #j'ai le nombre des données n, mais je ne peux pas savoir le nombre de données p!
                        }
                        elsif(ma_ligne contient P_data_) 
                        {
                            $N_P_Data{$n-1}{$p} = $ma_ligne; #ceci me permettera d'avoir une liste ayant cela  
                                                            #pour n=0; j'ai p =0...p=n
                            $p++;                           #pour n=1; j'ai p =0...p=k et ainsi de suite jusqu'à la fin de mon fichier
             }
    Cordialement,
    Nejma

  4. #4
    Membre actif

    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2013
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2013
    Messages : 87
    Points : 217
    Points
    217
    Par défaut
    Ah, j'ai pas pensé qu'avec un tableau ce sera aussi simple que ça !!! Merciiiiii Lolo78

    J'ai juste ajouter un autre tableau pour récupérer la taille de chaque ligne de P_data par N_data. et voilà j'ai mes données rangées dans un tableau que je peux manipuler avec des simple boucles for...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
            $P_per_N[$i-1][0] = $p;
    my $ni;
    my $pi;
            while ($ni< $N) 
            {
                 while ($pi< $P_per_N[$ni][0]) 
                      {
                            print" $N_P_Data[$ni][$pi] \n";
                            $pi++;
                      }
                 $ni++;
            }
    Par contre, et comme je suis débutante en perl, je ne sais est ce une bonne solution...

    Merci et bonne journée.
    Nejma

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

    voici un exemple utilisant un hachage de tableaux.
    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
     
    use strict;
    use warnings;
    use Data::Dumper;
    my (%hash, $key);
     
    while (<DATA>){
    	chomp;
    	if (/N_data/) {
    		$key = $_;
    	} else {
    		s/\s+//g;
    		push @{$hash{$key}}, $_
    	}
    }
     
    print Dumper \%hash;
     
     
    __DATA__
    N_data_0:
       P_data_1
       P_data_2
       P_data_3
       P_data_4
       P_data_5
       P_data_6
    N_data_1
       P_data_1
       P_data_2
    N_data_1
       P_data_1
       P_data_2
    Affichage du hachage en mémoire (le print Dumper ...):
    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
     
    $VAR1 = {
              'N_data_1' => [
                              'P_data_1',
                              'P_data_2',
                              'P_data_1',
                              'P_data_2'
                            ],
              'N_data_0:' => [
                               'P_data_1',
                               'P_data_2',
                               'P_data_3',
                               'P_data_4',
                               'P_data_5',
                               'P_data_6'
                             ]
            };
    Est-ce que c'est ce dont tu as besoin ?

  6. #6
    Membre actif

    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2013
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2013
    Messages : 87
    Points : 217
    Points
    217
    Par défaut
    Citation Envoyé par Lolo78 Voir le message
    Bonjour,

    Est-ce que c'est ce dont tu as besoin ?
    Oui, oui c'est exactement ce que je cherche! je te remercie infiniment Lolo78, pour le temps que tu m'as consacré .
    Mais pourrais tu me dire, STP, l'expression s/\s+//g; permet de faire quoi exactement?

  7. #7
    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
    Citation Envoyé par o_Nejma Voir le message
    Oui, oui c'est exactement ce que je cherche! je te remercie infiniment Lolo78, pour le temps que tu m'as consacré .
    Mais pourrais tu me dire, STP, l'expression s/\s+//g; permet de faire quoi exactement?
    Elle permet d'enlever les espaces dans les lignes en entrée (ceux au début des lignes "P_data_1"). "\s+" est une expression régulière qui reconnaît un ou plusieurs espaces consécutifs. L'opérateur s/a/b/g, permet de remplacer a par b dans la chaîne de caractères. Ici, "s/\s+//g" remplace les espaces de la variable par défaut $_ par rien, autrement dit ça enlève les espaces.

  8. #8
    Membre actif

    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2013
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2013
    Messages : 87
    Points : 217
    Points
    217
    Par défaut
    Merci pour tes explications et ton aide!

    cordialement,

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

Discussions similaires

  1. Tableau à 2 dimensions avec utilisation de MALLOC
    Par johnalias110 dans le forum C
    Réponses: 3
    Dernier message: 28/02/2007, 18h54
  2. créer un tableau 2 dimensions avec Malloc
    Par nimportekoi dans le forum C
    Réponses: 14
    Dernier message: 15/11/2006, 13h01
  3. allouer un tableau 2 dimensions avec shmget.
    Par youp_db dans le forum C
    Réponses: 3
    Dernier message: 12/06/2006, 11h11
  4. [FLASH MX] Tableau à double dimension
    Par totoche dans le forum Flash
    Réponses: 4
    Dernier message: 11/10/2005, 22h04
  5. [XSLT]tableau double entrée avec cellule manquante
    Par nferay dans le forum XSL/XSLT/XPATH
    Réponses: 9
    Dernier message: 08/03/2005, 15h07

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