Manipulation de tableau dans perl

Fermé
fredouille59 Messages postés 1 Date d'inscription mercredi 6 août 2014 Statut Membre Dernière intervention 6 août 2014 - 6 août 2014 à 08:37
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 - 19 août 2014 à 11:09
Bonjour,
je suis nouveau sur le forum et quelque peu débutant en perl, trop pour résoudre mon problème que voici:

j'ai un tableau dans ce genre:
jour mois annee heure bleu vert jaune rouge pièce télé
01 03 2014 18 - - - - 2 tele1
03 07 2014 15 - - - - 3 tele1
07 05 2014 09 - - - - 6 tele2
03 07 2014 15 - - - - 8 tele2
....

comme il y a des doublons et des informations croisées ou manquantes, je veux faire deux listes d'arrays uniques, d'une part a partir des 4 premières colonnes, et une seconde à partir de la dernière colonne (télé).

à partir de ces deux liste enfin je veux obtenir ce type de fichier:
jour mois annee heure tele1 tele2 tele3 tele4...
01 03 2014 18 2 - - -
03 07 2014 15 2 8 - -
07 05 2014 09 - 6 - -
03 07 2014 15 - - - -
.....

cela fait un bout de temps que je tourne sur les sort/uniq et awk mais impossible pour moi de construire un script perl unique qui rassemblerait toutes ces manipulations. Cela va peut être vous sembler trivial, mais je suis sur que l'un d'entre vous saura m'aider.

d'avance merci beaucoup pour l'aide.
fredouille

2 réponses

[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
18 août 2014 à 13:07
Salut,

J'ignore si tu as résolu ton problème.

Si on résume ce que tu veux faire (si j'ai bien compris), tu veux recenser chaque entrée unique composée des 4 premières colonnes "jour mois année et heure" et les associer au contenu de la colonne "pièce", soit la 9ème colonne (ton exemple utilise "pièce" et non la colonne "télé que tu mentionnes dans ton commentaire et ignore complètement le contenu de la 10ème colonne "télé"), en séparant ces informations par des espaces.

Pour faire cela, je n'utiliserai pas deux array, mais un seul hash, dont les clefs sont la combinaison du contenu des 4 premières colonnes et dont la valeur est le contenu de chaque colonne "pièce" correspondante. Tu fais alors tout en une passe.

Par ailleurs, tu dis qu'il y a des "doublons", cela signifie-t-il qu'il peut y avoir, par exemple, plusieurs lignes "03 07 2014 15" qui contiennent une "pièce" 2, par exemple ? Si oui, il faudra tester au préalable la valeur d'une clef existante du hash, pour vérifier qu'on n'ajoute pas plusieurs fois la même information.

Dernière question (pure curiosité). C'est original comme source de données.. c'est pour quel type d'application que tu fais ce script ?


Dal
0
Bonjour Dal,
merci d'avoir pris la peine de répondre sous ce beau soleil du mois d'aôut....
en fait ce sont des données de génomique mais comme je ne voulais pas brouiller mon message j'ai simplifié les données au maximum.
en fait ce que je voudrais c'est dans un tableau récupérer au final en X les valaurs uniques pour (jour mois annee heure) et obtenir en X les valeurs pour tele1 tele2 tele3 tele4...
je me suis assez mal exprimé, en fait je veux récupérer dans ce tableau les valeurs placées avant la colonne tele1....pour chaque valeur (jour mois annee heure).
à la consultation de différents forums, je sais qu'il faut passer par une table de hashage, mais comme vous l'aurez compris à ma façon de m'exprimer, je suis loin du compte pour écrire ce genre de script.
merci beaucoup pour l'aide
fredouille
0
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
19 août 2014 à 11:09
Dans ce cas, à partir de ceci :

jour mois annee heure bleu vert jaune rouge pièce télé 
01 03 2014 18 - - - - 2 tele1
03 07 2014 15 - - - - 3 tele1
07 05 2014 09 - - - - 6 tele2
03 07 2014 15 - - - - 8 tele2

au lieu de :

jour mois annee heure tele1 tele2 tele3 tele4...
01 03 2014 18 2 - - -
03 07 2014 15 2 8 - -
07 05 2014 09 - 6 - -
03 07 2014 15 - - - -

ne veux tu pas en fait obtenir cela :

jour mois annee heure tele1 tele2 tele3 tele4
01 03 2014 18 2 - - -
03 07 2014 15 3 8 - -
07 05 2014 09 - 6 - -

Dal
0