Transformation données Perl en C ? Help !

Résolu/Fermé
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 - 2 mai 2005 à 14:55
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 - 2 mai 2005 à 15:47
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 :
 

#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 :)

2 réponses

kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
2 mai 2005 à 15:32
Ya pas une bete du Perl qui pourrait m'aider ?
0
m0n0-le-14r3 Messages postés 174 Date d'inscription mercredi 13 avril 2005 Statut Membre Dernière intervention 25 octobre 2005 17
2 mai 2005 à 15:44
ben si moi.. mais la j'ai pâs le temps !!
0
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
2 mai 2005 à 15:47
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 !
0