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 :

[PERL] Problème avec map


Sujet :

Langage Perl

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    801
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 801
    Points : 314
    Points
    314
    Par défaut [PERL] Problème avec map
    Bonjour à tous,
    Voilà j'ai un fichier séparé par des ;

    il a cette structure:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    val11;val12;val13;val14;val15
    val21;val22;val23;val24;val25
    val31;val32;val33;val34;val35
    val41;val42;val43;val44;val45
    Je voudrais le mettre dans un tableau à 2 dimension dont 1 dimension sera indicée

    j'ai donc fait le code suivant:

    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
     
    $file='d:\load.csv';
    @Champs=qw/arg1 arg2 arg3 arg4 arg5/;
     
    %newtab;
    open (file,$file) or die $!;
    @tab=<file>;
    close(file);
     
    @newtab{@Champs}=map{split(/;/,$_)}@tab;
     
     
    foreach my $keys (keys %newtab)
    {
    print "$keys:$newtab{$keys}[0]\n";
    }
    J'arrive bien à afficher les clés de mon hachage.
    Mais j'arrive pas à afficher les valeur (ie pour la première ligne: $newtab{$keys}[0])

    Pouvez vous m'aider s'il vous plait ???

    Merci pour vos réponses.
    Bonne fin d'après midi.
    tout le monde est d'accord pour critiquer la pensée unique

  2. #2
    Membre du Club
    Inscrit en
    Octobre 2005
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 47
    Points : 56
    Points
    56
    Par défaut
    (Encore moi!)

    Ton map ne peut pas marcher comme ça. map retourne toujours une liste, alors que dans ton code tu lui "demandes" de te fournir un hash.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    801
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 801
    Points : 314
    Points
    314
    Par défaut
    ah mince.
    alors comment faire ??

    Si je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    @{$newtab[$i]}=map{split(/;/,$_);$i++}@tab;

    C'est pareil alors ???
    tout le monde est d'accord pour critiquer la pensée unique

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    801
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 801
    Points : 314
    Points
    314
    Par défaut
    Bon alors finalement j'ai abandonné map
    et j'ai fait une boucle.


    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
     
    #!/c:\perl\bin\perl.exe
     
    $file='d:\load.csv';
    @Champs=qw/SALES_ORGANISATION BUYING_GROUP BUYING_GROUP_NAME BILL_TO SOLD_TO SHIP_TO SHIP_TO_NAME ZIP_CODE TOWN CUSTOMER_NETWORK_ID TYPE_CODE CUSTOMER_IDENTIFIER INBOUND_ORDER INBOUND_REMADV INBOUND_DEBADV OUTBOUND_ORDSP OUTBOUND_DESADV OUTBOUND_INVOICE COMMENTAIRE SALES_CUSTOMER_NETWORK_ID SALES_CUSTOMER_IDENTIFIER SALES_SGA_NETWORK_ID SALES_MANUAL_ORDER_ACK EDI_OUTPUT_ORDER EDI_OUTPUT_DESADV EDI_OUTPUT_INVOICE/;
     
    #%newtab=@Champs;
    open (file,$file) or die $!;
    @tab=<file>;
    close(file);
    for(my $i=0;$i<=$#tab;$i++)
    {
          @{$newtab[$i]}{@Champs}=split(/;/,$tab[$i]);
    }
    foreach (@newtab)
    {
          foreach my $keys (keys %{$newtab[$i]})
          {
          print "$newtab[$i]{$keys}";
          }
          print "\n";
    $i++;
    }

    Je mets le tag résolu mais sans grande conviction sur ce post...

    Bonne soirée, je rentre au bercaille !!!
    tout le monde est d'accord pour critiquer la pensée unique

  5. #5
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    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
     
    $file='d:\load.csv';
    @Champs=qw/arg1 arg2 arg3 arg4 arg5/;
     
    %newtab;
    open (file,$file) or die $!;
    @tab=<file>;
    close(file);
     
    my @newtab =map{my %temp; @temp{@Champs} = (split(/;/,$_); \%temp}@tab;
     
     
    foreach my $keys ( @Champs )
    {
    print "$keys:$newtab[0]{$keys}\n";
    }
    --
    Jedaï

  6. #6
    Membre du Club
    Inscrit en
    Octobre 2005
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 47
    Points : 56
    Points
    56
    Par défaut
    Jedaï : j''avais l'impression que l'OP voulait un HoA... mais j'aime bien ta solution.

  7. #7
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Tu remarqueras que dans sa dernière solution, il a plutôt utilisé un AoH, les deux interfaces sont de toute façon complètement interchangeables dans son cas.

    --
    Jedaï

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    801
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 801
    Points : 314
    Points
    314
    Par défaut
    Qu'est ce que OP et HoA
    Quel est le mieux ??
    tout le monde est d'accord pour critiquer la pensée unique

  9. #9
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut
    Il me semble que :
    OP -> Original Poster (Posteur initial - toi, LE NEINDRE)
    HoA -> Hash of Arrays (Hachage de Listes/Tableaux)
    AoH -> Array of Hashes (Liste/Tableau de Hachages)

    Quant à savoir ce qui est le mieux entre HoA et AoH, ça dépend de toi ... de ce que tu veux faire. Quelle est la structure qui correspond le mieux à ton besoin ? As tu réellement besoin d'une telle structure, etc.

    Bonne continuation.
    La FAQ Perl est par ici
    : La fonction "Rechercher", on aurait dû la nommer "Retrouver" - essayez et vous verrez pourquoi !

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    801
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 801
    Points : 314
    Points
    314
    Par défaut
    Ok merci pour les clarifications !!!
    Y'aurait presque un glossaire à monter là !!!

    Bonne matinée
    tout le monde est d'accord pour critiquer la pensée unique

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

Discussions similaires

  1. [PERL]problème avec mon premier programme
    Par lucifer01 dans le forum Programmation et administration système
    Réponses: 4
    Dernier message: 07/04/2009, 18h38
  2. Biomart Perl : problème avec getResultTable()
    Par picopom dans le forum Bioinformatique
    Réponses: 0
    Dernier message: 31/03/2009, 15h36
  3. Problèmes avec map et chaînes en tant que clé
    Par oodini dans le forum SL & STL
    Réponses: 4
    Dernier message: 15/09/2008, 18h00
  4. [STL]Problème avec map
    Par mambo dans le forum SL & STL
    Réponses: 11
    Dernier message: 27/07/2006, 15h39
  5. [Perl]problème avec fork
    Par LE NEINDRE dans le forum Programmation et administration système
    Réponses: 1
    Dernier message: 23/09/2005, 15h31

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