OVH Cloud OVH Cloud

Perl et Structure

23 réponses
Avatar
gla
Bonjour,

En "C" on peut facilement définir des structures.

ex:
struct point3D
{
int x, y, z;
};


Et ensuite créer un tableau de cet élément là

ex:

struct point3D mespoints[64];


Comment on fait en Perl pour avoir un tableau de structure ?

10 réponses

1 2 3
Avatar
Nicolas George
"extense" wrote in message <4396098b$0$21271$:
Comment on fait pour avoir un tableau ou chaque élément est une structure ?


De la même manière que pour avoir un tableau dont chaque élément est 42,
mais avec une structure à la place de 42.

Avatar
DoMinix
extense wrote:
si ca, ca ne marche pas :
$pts[10]->x(4);

Comment on fait pour avoir un tableau ou chaque élément est une structure ?


si c'est juste pour gerer des coordonnées, il faut raisonner differement
et faire un tableau de tableau

$struc = ([a,b,c],[,,],[x,y,z]) ;
$index++;
$x = $struc[$index][0];
$y = $struc[$index][1];
$z = $struc[$index][2];


L'objet est d'avoir un tableau de point 3D...



BTW
si tu as besoin de faire du calcul intensif sur ces structures
regarde donc directement PDL
perldoc PDL
PDL est un module special pour les gros traitements de données
c'est astreignant mais plus performant.

--
dominix

Avatar
FDA

BTW
si tu as besoin de faire du calcul intensif sur ces structures
regarde donc directement PDL
perldoc PDL
PDL est un module special pour les gros traitements de données
c'est astreignant mais plus performant.


Et à ce compte, une meilleure façon d'être performant consiste sans
doute à utiliser un langage qui soit fait pour traiter directement les
tableaux. SAS coûte cher, mais celui-là est gratuit :

http://fr.wikipedia.org/wiki/APL_(langage)

(Il vaut mieux utiliser Mozilla et avoir la police Arial Unicode si tu
veux que tout s'affiche bien)

Une fois les calculs effectués, tu peux revenir à Perl en stockant les
résultats dans un fichier, voire dans un tableur que tu commanderas par
le module Win32 de Perl si tu es en Windows, ou quoi que ce soit qui en
tienne lieu en Linux.

Avatar
kurtz_le_pirate
"Nicolas George" <nicolas$ a écrit dans le message
de news: dn4mci$ofi$
kurtz le pirate wrote in message
:
tiens, chez moi, Class:Struct me retourne "No documentation found
for
"Class:Struct"...


Avec deux :, comme dans tous les modules perl, ça devrait mieux
marcher.


en plus j'ai relu 50 fois ma commande !!!!
merci nicolas :)


Avatar
gla
tableau de tableau... hum connait pas !!

Bon, visiblement les structures et Perl ca ne fait pas bon menage, vu
comment les solutions semblent alambiquées et tordue.

Pour répondre au problème de performance, disont que la notion de
performance est relative. J'utilise le Perl pour maquéter les principes (je
bosse depuis une semaine sur un moteur 3D sur console et je paufine le pipe
d'intégration des éléments en provenance de 3DS Max et Maya). Une fois que
ca marche, je le recode en C ou en Assembleur .386 le cas échéant.



"DoMinix" a écrit dans le message de news:
439678b4$0$14081$
extense wrote:
si ca, ca ne marche pas :
$pts[10]->x(4);

Comment on fait pour avoir un tableau ou chaque élément est une structure
?


si c'est juste pour gerer des coordonnées, il faut raisonner differement
et faire un tableau de tableau

$struc = ([a,b,c],[,,],[x,y,z]) ;
$index++;
$x = $struc[$index][0];
$y = $struc[$index][1];
$z = $struc[$index][2];


L'objet est d'avoir un tableau de point 3D...



BTW
si tu as besoin de faire du calcul intensif sur ces structures
regarde donc directement PDL
perldoc PDL
PDL est un module special pour les gros traitements de données
c'est astreignant mais plus performant.

--
dominix



Avatar
Paul Gaborit
À (at) Wed, 7 Dec 2005 13:43:08 +0100,
"gla" écrivait (wrote):
Bon, visiblement les structures et Perl ca ne fait pas bon menage, vu
comment les solutions semblent alambiquées et tordue.


Elles ne sont ni alambiquées ni tordues. Elles sont multiples(*). Tout
simplement car la notion de structure peut être implémentée de
différentes manières. Perl n'impose donc pas de modèle
d'implémentation prédéfinie. À vous de choisir l'implémentation la
plus adpatée à votre cas (la plus rapide à mettre en oeuvre, la plus
performante à utiliser, la plus évolutive, la plus lisible, etc.).

(*) Et encore, on ne vous a pas parlé de toutes les autres solutions :
passer par des tableaux, par pack/unpack, par des bibliothèques
externes, etc.

--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>

Avatar
Emmanuel Florac
Le Wed, 07 Dec 2005 13:43:08 +0100, gla a écrit :


Bon, visiblement les structures et Perl ca ne fait pas bon menage, vu
comment les solutions semblent alambiquées et tordue.


Essayer de faire du C en perl, forcément c'est alambiqué et tordu... En
perl on utilise d'autres méthodes pour faire la même chose. On peut
imiter des fonctionnalités C (comme on peut faire des boucles "for ( my
$i; $i<10; $i++)") mais il ne faut pas : c'est forcément inefficace,
et/ou buggé (et il faut utiliser foreach () et pas for ()...)

--
on passe la moitié de son temps à refaire ce que l'on n'a pas eu le
temps de faire correctement.
Loi de Myers.

Avatar
Paul Gaborit
À (at) Wed, 07 Dec 2005 15:07:37 +0100,
Emmanuel Florac écrivait (wrote):
Essayer de faire du C en perl, forcément c'est alambiqué et tordu... En
perl on utilise d'autres méthodes pour faire la même chose. On peut
imiter des fonctionnalités C (comme on peut faire des boucles "for ( my
$i; $i<10; $i++)") mais il ne faut pas : c'est forcément inefficace,
et/ou buggé (et il faut utiliser foreach () et pas for ()...)


Que ce soit inefficace, c'est parfois vrai. Mais buggé... Non ! Ça
marche très bien. D'autant que 'foreach' et 'for' sont de parfaits
synonymes.

Après, c'est sûr : la syntaxe de Perl n'est pas la même que celle du C
même si il y a parfois quelques ressemblances volontaires ;-)

--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>

Avatar
extense
Tout ca est bien gentil, je suis content de savoir qu'il existe il multitude
de façon de faire, mais j'aimerais bien qu'on m'en indique juste "cool" une
pour faire ca :

J'aimerai posséder un tableau unique pour contenir des choses diverses sans
avoir a gerer autant de tableau que de type d'élément.

Mon exemple était tres simple, j'ai des points 3D a stocker. Evidement, en
attendant de trouver mieux j'ai fait ca:

my (@vx, @vy, @vz);

et j'accede aux éléments de la manière suivante :

$vx[$i] = $trucx;
$vy[$i] = $trucy;
$vz[$i] = $trucz;

maintenant je trouve que le "C" possède un mécanisme élégant et simple : la
fonction struct et je suis étonné qu'on ne me propose pas une seule solution
simple pour faire la même chose ! (avec un exemple d'utilisation si
possible!)

Comment font les gens qui ont a ranger a la fois des adresses, des noms, des
valeurs,...etc (le principe de la fiche). associé a un seul index ?
Avatar
FDA

maintenant je trouve que le "C" possède un mécanisme élégant et simple


<troll>
Alors tu *adoreras* C++ : les performances du Smalltalk avec l'élégance
du C :-D (si quelqu'un connaît un langage où ce soit pile l'inverse, en
revanche, je suis fortement intéressé)
</troll>




la fonction struct


Ce n'est pas une fonction, pas plus d'ailleurs que int, sizeof ou return.


Comment font les gens qui ont a ranger a la fois des adresses, des noms, des
valeurs,...etc (le principe de la fiche). associé a un seul index ?


Ils utilisent une base de données toute faite, comme tout le monde. Tu
as MySQL qui est très bien, gratuit, et s'interface très proprement avec
un hash standard de Perl par un "bless" si mes souvenirs sont bons.

1 2 3