Bonjour à tous ,
Vivant chichement sur mes maigres «*acquis*» en Perl, cela faisait un moment que je n'étais pas venu demander un conseil concernant un programme. Mais voilà... cette fois-ci, après une longue série d'essais, il semble que mon objectif est au-delà de mes faibles compétences actuelles . Toute aide sera bien entendu plus que la bienvenue et je vous en remercie vivement d'avance.
Grosso modo, il s'agit de manipuler un fichier CSV / tableau multidimensionnel dont la structure initiale ressemble à :
Ma,10,0,5,4,1,0,....,5
Mb,0,1,4,16,4,7,....,1
Mc,4,3,2,11,1,1,....,17
Md,4,2,1,11,1,1,....,1
Me,3,4,5,2,5,3,....,6
Mx,........................,4
Ce que je souhaite faire :
1. Charger le tableau / fichier (OK, même en multidimensionnel ; cf le code ci-dessous).
2. Faire un tri décroissant sur la colonne 2 (à partir de [0][1] donc), en faisant «*bouger*» tout le tableau en fonction dudit tri.
3. Affecter des rangs à la colonne 2 en fonction de ce même tri. Dans cet exemple et sur cette colonne 2, cela donnerait par exemple :
CSV => Rang(s)
10 => 1
4 => 2
4 => 2
3 => 3
…
2 => 4
2 => 4
1 => 5
0.5 => 6
0.5 => 6
…
0 => x
4. Reproduire l'opération 2 et 3 sur chacune des colonnes.
=> Tout ça pour obtenir un tableau où les fréquences seraient remplacées par des rangs.
Malheureusement, je ne connais rien (et après lecture de différents sites, il semble bien que je ne comprenne rien) à la syntaxe liée aux tableaux multidimensionnels. Pour le moment, la seule chose que j'ai réussi à faire est de charger mon fichier dans un tableau, avec – par exemple - :
Ensuite, c'est le vide total (car je ne sais ni comment trier, ni comment pointer dans les tableaux multidimensionnels, ni comment en modifier les valeurs). Si quelqu'un à une idée pour arriver à ce code ce serait fabuleux et je vous en remercie beaucoup .
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 open (FICH, "final.csv") || die ("pas de fichier CSV\n"); while (<FICH>) { @tmp = split(/[,]/); push @tabtab, [ @tmp ]; } close (FICH);
Cordialement.
Partager