OVH Cloud OVH Cloud

Structure de données en perl

9 réponses
Avatar
grosnours [FT]
Bonjour

J'aimerais savoir s'il est possible d'utiliser des pointeurs en perl, et
cela en vue de créer une structure de données de type arbre rouge-noir,
voire b-arbre.

Mon objectif est double :
1) créer une base de données (format non encore défini, idéalement du
simple ascii) comportant 2 champs qui forment à eux deux l'identifiant.
Ces deux champs sont un numéro unique et un nom correspondant à ce
numéro. Mais plusieurs paires sont possibles.
Exemple : "43" "toto" et "43" "tata" sont valides.
Je ne désire pas de doublons.

2) récupérer une base de données existante au format ascii comportant
les deux champs ci dessus.

Aussi, ma deuxieme question est : quel format de base de données me
conseillez vous ? J'opte naturellement pour le simple ascii sans sgbd
car il est plus aisé de rechercher une information par un simple cat
fichier | grep info.

Je suis ouvert à toute proposition.

Merci d'avance.

Fabrice

9 réponses

Avatar
Jérémy JUST
On Sun, 07 Sep 2003 16:22:27 +0200
"grosnours [FT]" wrote:

J'aimerais savoir s'il est possible d'utiliser des pointeurs en perl


Oui, on les appelle des références.

$ perldoc perlreftut


Exemple : "43" "toto" et "43" "tata" sont valides.


Je serais partant pour utiliser un bête hachage. Une solution simple
serait de créer une chaîne en concaténant tes deux clefs, pour t'en
servir comme clef du hachage.
Sinon, tu peux utiliser un hachage de hachage.


Aussi, ma deuxieme question est : quel format de base de données me
conseillez vous ?


Si c'est pour faire des choses aussi simples que ça, je préconise des
DB_Files. Ce sont des tableaux associatifs écrits sur disque.

$ perldoc DB_File


J'opte naturellement pour le simple ascii sans sgbd


Si tu veux une structure d'accès rapide, utilise des DB_Files; le seul
inconvénient est qu'il te faudra toujours Perl pour accéder au contenu
(un script de trois lignes est suffisant, mais il faut quand même le
compilateur derrière).

Un vrai SGBD ne sera intéressant que pour des structures plus
complexes.

--
Jérémy JUST

Avatar
Emmanuel Florac
Dans article ,
disait...

Si tu veux une structure d'accès rapide, utilise des DB_Files; le seul
inconvénient est qu'il te faudra toujours Perl pour accéder au contenu
(un script de trois lignes est suffisant, mais il faut quand même le
compilateur derrière).



Mais non, C'est du format Berkeley DB, c'est standard et des tas de trucs
s'interfacent avec ça...

--
Quis, quid, ubi, quibus auxiliis, cur, quomodo, quando?

Avatar
Samuel Mouniée
Bonjour,

grosnours [FT] wrote:
Bonjour

J'aimerais savoir s'il est possible d'utiliser des pointeurs en perl, et
cela en vue de créer une structure de données de type arbre rouge-noir,
voire b-arbre.


perl utilise des references symboliques ou non.

il existe des modules pour les arbres rouge noires et les BTree.


Mon objectif est double :
1) créer une base de données (format non encore défini, idéalement du
simple ascii) comportant 2 champs qui forment à eux deux l'identifiant.
Ces deux champs sont un numéro unique et un nom correspondant à ce
numéro. Mais plusieurs paires sont possibles.
Exemple : "43" "toto" et "43" "tata" sont valides.
Je ne désire pas de doublons.

2) récupérer une base de données existante au format ascii comportant
les deux champs ci dessus.

Aussi, ma deuxieme question est : quel format de base de données me
conseillez vous ? J'opte naturellement pour le simple ascii sans sgbd
car il est plus aisé de rechercher une information par un simple cat
fichier | grep info.


les fichiers Berkeley DBM ou autres, permettent de stocker des bases
plus ou moins importantes sur un principe cle / valeur. on y trouve des
enregistrements en tableaux, en hashage ou en B Tree.



Je suis ouvert à toute proposition.

Merci d'avance.

Fabrice



Padkoa,


.S'nuoM

Avatar
Michel Rodriguez
grosnours [FT] wrote:


Aussi, ma deuxieme question est : quel format de base de données me
conseillez vous ? J'opte naturellement pour le simple ascii sans sgbd
car il est plus aisé de rechercher une information par un simple cat
fichier | grep info.


Si tu veux faire dans le format texte, YAML me semble assez indique: c'est
un format de serialisation de donnees concu pour etre lisible et compact.
Un seul probleme possible: au niveau encodage des caracteres, YAML fait de
l'UTF-8, pas de l'ISO-8859-1.

Sinon tu peux utiliser CSV (comma separated variables), et pourquoi pas DBI
et DBD::AnyData: tu traite le CSV comme une table relationelle, en utlisant
DBI. Du coup, tu peux assez simplement passer d'un format texte a une vrai
base de donnees, si tu as besoin plus tard, en changeant juste la
connection (et pense a DBD::SQLite, une BD ultra-simple, sans
administration, mais puissante et assez complete). Bon, c'est peut etre un
peu trop complique dans ton cas, mais si tu veux te garder des possibilites
d'evoluer, ca peut valoir le coup.

__
Michel Rodriguez
Perl & XML
http://xmltwig.com

Avatar
Jérémy JUST
On Sun, 7 Sep 2003 22:18:25 +0200
Emmanuel Florac wrote:

Si tu veux une structure d'accès rapide, utilise des DB_Files; le
seul inconvénient est qu'il te faudra toujours Perl pour accéder au
contenu (un script de trois lignes est suffisant, mais il faut quand
même le compilateur derrière).


Mais non, C'est du format Berkeley DB, c'est standard et des tas de
trucs s'interfacent avec ça...


Oui, oui, c'est standard, mais il faut de quoi y accéder.
J'étais un peu restrictif en disant qu'il fallait Perl. En gros, un
grep marchera mal dessus.

Et si on se retrouve perdu sous Windows avec un fichier Berkeley, on
est bien embêté... C'est pas avec Wordpad qu'on va pouvoir en faire
grand chose (télécharger ActivePerl, c'est le plus simple, me
semble-t-il).


--
Jérémy JUST


Avatar
Jérémy JUST
On Mon, 08 Sep 2003 21:41:35 +0200
Michel Rodriguez wrote:

pourquoi pas DBI et DBD::AnyData: tu traite le CSV comme une table
relationelle, en utlisant DBI.


C'est TERRIBLEMENT LENT.
À mon sens, cette solution n'est à utiliser que si on a de solides
arguments pour la portabilité du code entre accès à un SGBD et accès à
un fichier CSV (sauf que le langage de requêtes supporté par
DBD::AnyData est très pauvre).

--
Jérémy JUST

Avatar
Michel Rodriguez
Jérémy JUST wrote:

On Mon, 08 Sep 2003 21:41:35 +0200
Michel Rodriguez wrote:

pourquoi pas DBI et DBD::AnyData: tu traite le CSV comme une table
relationelle, en utlisant DBI.


C'est TERRIBLEMENT LENT.
À mon sens, cette solution n'est à utiliser que si on a de solides
arguments pour la portabilité du code entre accès à un SGBD et accès à
un fichier CSV (sauf que le langage de requêtes supporté par
DBD::AnyData est très pauvre).


DBD::AnyData utilise un sous-ensemble de SQL (la plus grosse limitation est
l'absence de join), ca me semble pas si pauvre que ca.

Et puis si c'est lent c'est une bonne incitation a passer a un vrai base de
donnees ;--)

Merci pour la precision en tout cas.

__
Michel Rodriguez
Perl & XML
http://xmltwig.com


Avatar
grosnours [FT]
merci pour toutes ces réponses

dans la mesure du possible, je testerai chacune.

grosnours [FT] wrote:
Bonjour

J'aimerais savoir s'il est possible d'utiliser des pointeurs en perl, et
cela en vue de créer une structure de données de type arbre rouge-noir,
voire b-arbre.

Mon objectif est double :
1) créer une base de données (format non encore défini, idéalement du
simple ascii) comportant 2 champs qui forment à eux deux l'identifiant.
Ces deux champs sont un numéro unique et un nom correspondant à ce
numéro. Mais plusieurs paires sont possibles.
Exemple : "43" "toto" et "43" "tata" sont valides.
Je ne désire pas de doublons.

2) récupérer une base de données existante au format ascii comportant
les deux champs ci dessus.

Aussi, ma deuxieme question est : quel format de base de données me
conseillez vous ? J'opte naturellement pour le simple ascii sans sgbd
car il est plus aisé de rechercher une information par un simple cat
fichier | grep info.

Je suis ouvert à toute proposition.

Merci d'avance.

Fabrice



Avatar
tiscali
tableau associatif
%tab{a}->{b}

grosnours [FT] wrote:
Bonjour

J'aimerais savoir s'il est possible d'utiliser des pointeurs en perl, et
cela en vue de créer une structure de données de type arbre rouge-noir,
voire b-arbre.

Mon objectif est double :
1) créer une base de données (format non encore défini, idéalement du
simple ascii) comportant 2 champs qui forment à eux deux l'identifiant.
Ces deux champs sont un numéro unique et un nom correspondant à ce
numéro. Mais plusieurs paires sont possibles.
Exemple : "43" "toto" et "43" "tata" sont valides.
Je ne désire pas de doublons.

2) récupérer une base de données existante au format ascii comportant
les deux champs ci dessus.

Aussi, ma deuxieme question est : quel format de base de données me
conseillez vous ? J'opte naturellement pour le simple ascii sans sgbd
car il est plus aisé de rechercher une information par un simple cat
fichier | grep info.

Je suis ouvert à toute proposition.

Merci d'avance.

Fabrice