Transformation données Perl en C ? Help !
Résolu
kij_82
Messages postés
4089
Date d'inscription
Statut
Contributeur
Dernière intervention
-
kij_82 Messages postés 4089 Date d'inscription Statut Contributeur Dernière intervention -
kij_82 Messages postés 4089 Date d'inscription Statut Contributeur Dernière intervention -
j'ai grand besoin d'aide pour une transformation de donnée :
Toujours dans le cadre de mon prog Perl qui se charge d'éxécuter des requetes sur une base, un programme C se charge de passer les requetes par la pile au scipt Perl. Pour un "select", par exemple, le script Perl retourne un pointeur sur hash pour les ligne selectionnées. Au retour du script, j'ai donc dans ma pile une référence sur ce hash et je voudrais le transformer en tableau de pointeur sur chaine ( char * ). Le truc c'est que je ne peux m'aider du net car j'ai qq soucis de coupure en ce moment, alors je profite du peu de temps ou je réussi à acceder au net pour poster ce message. Comment faire donc pour transformer mes ligne de retour en un tableau ?
merci, voici le code du prog C :
Merci d'avance :)
Toujours dans le cadre de mon prog Perl qui se charge d'éxécuter des requetes sur une base, un programme C se charge de passer les requetes par la pile au scipt Perl. Pour un "select", par exemple, le script Perl retourne un pointeur sur hash pour les ligne selectionnées. Au retour du script, j'ai donc dans ma pile une référence sur ce hash et je voudrais le transformer en tableau de pointeur sur chaine ( char * ). Le truc c'est que je ne peux m'aider du net car j'ai qq soucis de coupure en ce moment, alors je profite du peu de temps ou je réussi à acceder au net pour poster ce message. Comment faire donc pour transformer mes ligne de retour en un tableau ?
merci, voici le code du prog C :
#include <EXTERN.h> #include <perl.h> #include <time.h> static PerlInterpreter *my_perl; static void xs_init (pTHX); EXTERN_C void boot_DynaLoader (pTHX_ CV* cv); EXTERN_C void xs_init(pTHX) { char *file = __FILE__; /* DynaLoader is a special case */ newXS("DynaLoader::boot_DynaLoader", boot_DynaLoader, file); } static void PerlPower(char * arg[], int taille) { dSP; // initialise le pointeur de pile int count = 0, i = 0; SV *sv; AV *av = newAV(); ENTER; // tout ce qui est cree a partir d'ici SAVETMPS; // ... est une variable temporaire PUSHMARK(SP); // sauvegarde du pointeur de pile while( i < taille ) XPUSHs(sv_2mortal(newSVpv(arg[i++],0))); // depose la base dans la pile PUTBACK; // rend global le pointeur local de pile count = perl_call_pv("lance", G_ARRAY); // appelle la fonction SPAGAIN; // rafraichit le pointeur de pile // retire la valeur de retour de la pile if(count != 0) { printf("Nombre de retour = %d\n",count); i = 0; while(i++ < count) { sv = newSVpv(POPp,100); av_push(av,sv); printf("%s\n",SvPV_nolen(sv)); } } PUTBACK; FREETMPS; // libere la valeur de retour LEAVE; // ...et retire les arguments empiles } int main (int argc, char **argv, char **env) { char *user = "root"; char *pwd = ""; char *base = "questionnaire"; char *driver = "mysql"; char *args[] = { driver, base, user, pwd, "select * from utilisateur", "select * from formulaire", "select * from question" }; char *embedding[] = { "", "Bidon.pl" }; time_t deb, fin; int arg = 2; time(&deb); my_perl = perl_alloc(); perl_construct(my_perl); perl_parse(my_perl, xs_init, arg, embedding, NULL); PerlPower(args,sizeof(args) / sizeof(args[0])); perl_destruct(my_perl); perl_free(my_perl); time(&fin); printf("Temp execution = %d secondes\n",fin-deb); }
Merci d'avance :)
A voir également:
- Transformation données Perl en C ? Help !
- Fuite données maif - Guide
- Supprimer les données de navigation - Guide
- Trier des données excel - Guide
- Sauvegarde des données - Guide
- Excel validation des données liste - Guide
2 réponses
ben si moi.. mais la j'ai pâs le temps !!
T'fou pas d'ma geule toi... je suis assez dans la merde comme ca ! Y mon filer un truc de fou à faire en plus : Un serveur Perl qui tourne en démon, qui parle par socket à plusierus Programme cklient qui veulent intérroger une base ... z'orais pas pu l'dire plus tot non! Surtout que je suis une brele en réseau alors les sokets...
mais bon, on va faire avec !
mais bon, on va faire avec !