codice:
#include <stdlib.h>
#include <stdio.h>
#include <mxml.h>
#include <pthread.h>
mxml_type_t com_cb(mxml_node_t *taskseries);
main()
{
int anno, mese, giorno, ore, minuti, secondi;
FILE *fp;
mxml_node_t *taskseries;
fp = fopen("lista.xml", "r");
taskseries = mxmlLoadFile(NULL, fp, com_cb);
fclose(fp);
}
questa è com_cb
codice:
#include <stdio.h>
#include <stdlib.h>
#include <mxml.h>
#include <pthread.h>
#include <sqlite3.h>
mxml_type_t com_cb(mxml_node_t *taskseries)
{
const char *data,*app,*hasdtime;
int annot,mese,giorno,ore,minuti,secondi;
int ora,day,year,bis,gm,gbis,i,time;
int orar,min,dayr,meser,annor;
int anno[12];
float dif;
double created;
int ad,id,c;
char insert[110];
char *zErrMsg;
sqlite3* conn;
sqlite3_stmt* result;
//inizializiamo le variabili al 1 gennaio 2012 alle ore 8
ora=8;
day=1;
year=2012;
anno[0]=31;
anno[1]=28;
anno[2]=31;
anno[3]=30;
anno[4]=31;
anno[5]=30;
anno[6]=31;
anno[7]=31;
anno[8]=30;
anno[9]=31;
anno[10]=30;
anno[11]=31;
gm=0;
i=0;
id=1;
created=2455927.833;
data = mxmlElementGetAttr(taskseries, "created");
if (data != NULL)
{
id=id+1;
printf("%s \n",data);
sscanf(data,"%d-%d-%dT%d:%d:%dZ", &annot, &mese, &giorno, &ore, &min, &secondi);
printf("anno : %d\n",annot);
printf("mese : %d\n",mese);
printf("giorno : %d\n",giorno);
printf("ore : %d\n",ore);
printf("minuti : %d\n",min);
printf("secondi : %d\n",secondi);
printf("id vale %d \n",id);
ad=sqlite3_open("pomodairo.db", &conn);
if (ad)
{
printf("Errore durante l'apertura \n");
sqlite3_close(conn);
}
else
{
printf("Connessione riuscita \n");
}
app= mxmlElementGetAttr(taskseries,"name");
if (app != NULL)
{
printf("%s \n",app);
}
/* procedo con il calcolo di created iniziando a convertire tutti
i dati in minuti partendo dal calcolo degli anni */
year=annot-year;
bis=year/4;
gbis=((1*bis)*24)*60;
year=(((year*365)*24)*60)+bis;
printf("gli anni in minuti sono %d \n",year);
//calcolo mesi di differenza in giorni
while(i<mese-1){
gm=gm+anno[i];
i=i+1;
}
printf("i mesi in giorni sono %d \n",gm);
//calcolo mesi in minuti
if(mese<2)
gm=(gm*24)*60;
else
{
gm=gm+1;//perchè il 2012 è bisestile)
gm=(gm*24)*60;
}
printf("i mesi in minuti sono %d \n",gm);
//calcolo giorni in minuti
day=((giorno-1)*24)*60;
printf("i giorni in minuti sono %d \n",day);
//calcolo la differenza sull'ora
if(ora > ore)
ora=(ora-ore)*60;
else
ora=(ore-ora)*60;
printf("l'ora in minuti e %d \n",ora);
//somma finale
dif=min+ora+day+gm+year;
printf("la differenza in minuti è %f \n",dif);
created=created+(dif*0.0006944);
printf("il valore di created è \n");
printf("%f \n",created);
//passo i dati al database
c=sprintf(insert,"INSERT INTO pomodoro Values(%d,'%s','pomodoro',0,0,0,%f,NULL,0,1,0,0,3)",id,app,created);
printf("%s \n",insert);
ad=sqlite3_exec(conn,insert,NULL,0,&zErrMsg);
if(ad)
{
printf("Errore nell'esecuzione della query \n");
printf("%s \n",zErrMsg);
sqlite3_close(conn);
}
else
printf("Query riuscita \n");
printf("id vale %d \n",id);
sqlite3_close(conn);
}
// sqlite3_finalize(conn); eliminata perchè genera errore di segmentazione
return (MXML_TEXT);
}
se vi serve vi posso mettere anche l'output che ottengo