[PERL] Création tableau 2D dynamique indicé

trashvip Messages postés 28 Statut Membre -  
trashvip Messages postés 28 Statut Membre -
Bonjour,

Voici mon souci :
Je souhaite créer un tableau 2D dynamique.
Mes données d'entrée sont issu d'un fichier "a.txt" qui contient un ensemble d'éléments (2 colonnes) comme suit: plusieurs séries de données dont la première colonne (A) est aléatoirement redondantes
A         B
------------
H1     5.34
H2     6.56
He4     8.99
He5     7.54
CL7     6.03
Br9    0.04

<== ligne vide délimitant le temps n°2

H2     9.44
H3     5.21
He5     1.11
CL7     4.69

<== ligne vide délimitant le temps n°3

etc....

Je souhaite remplir un tableau avec en "abscisse" le temps (temps 1 = première série, temps 2 = seconde série, etc....) et en ordonnée les noms des éléments comme H1, H2...CL7 sans doublon.

==>i.e : ajouter un élément à un nouveau tableau ssi il n'existe pas déjà dans ce "nouveau" tableau. Si il n'existe pas, le créer en bas de tableau.

Le problème est le suivant : comment remplir ce tableau indicé sans qu'il y ait de doublon et en ajoutant les valeurs au bon temps correspondant ?

Pour cet exemple, mon tableau de sortie devrait être comme suit :
A        B        C         D
-----------------------------
H1     5.34 
H2     6.56      9.44
He4     8.99
He5     7.54     1.11
CL7     6.03     4.69
Br9     0.04
H3      5.21


Colonne A = noms
Colonne B = temps 1
Colonne C = temps 2

Pouvez-vous m'aider pleazzz !!!??
J'espère avoir été clair (?), n'hésitez pas à me demander des précisions....
Merci d'avance.
Configuration: Windows XP
Firefox 3.5.7

2 réponses

  1. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    hello
    et avec awk ?
    $ cat a1
    H1     5.34
    H2     6.56
    He4     8.99
    He5     7.54
    CL7     6.03
    Br9    0.04
    
    H2     9.44
    H3     5.21
    He5     1.11
    CL7     4.69
    
    $ awk 'BEGIN{split("A,B,C,D,E,F,G,H",l,",")};NF {x[$1]=x[$1] "\t" $2;z[$1]++};END{a=0;for(n in x){if(z[n]>a)a=z[n]};for(b=1;b<=a+1;b++)printf l[b] "\t";print "";for(b=1;b<=a+1;b++)printf "--------";print ""; for(n in x) print n,x[n]}' a1
    A	B	C	
    ------------------------
    He4 	8.99
    He5 	7.54	1.11
    Br9 	0.04
    H1 	5.34
    H2 	6.56	9.44
    H3 	5.21
    CL7 	6.03	4.69
    $ 
    
    0
  2. trashvip Messages postés 28 Statut Membre 5
     
    Merci dubcek.
    Comment je fais appel à "awk" dans un script PERL ?
    Cdlt
    0