xtremejames183
Messages postés32Date d'inscriptionvendredi 26 mai 2006StatutMembreDernière intervention14 avril 2009
-
14 juin 2007 à 14:49
cs_rt15
Messages postés3874Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention 7 novembre 2014
-
21 juin 2007 à 15:02
for (;;) if( (a (char)fgetc(fp)) '<' )
break; if ( (b (char)fgetc(fp)) '/' )
{
char tmp[5];
short i;
for ( i = 0; i < 4; i++ )
tmp[i] = (char)fgetc(fp);
tmp[4] = '\0';
#ifdef _WIN32
if ( !_stricmp("Logs",tmp) ) /* we found where we need to start */
#else
if ( !stricmp(("Logs",tmp) ) /* we found where we need to start */
#endif
{
done = true;
fseek( fp, -7, SEEK_CUR ); /* go back */
}
}
}
return 0;
}
Cette fonction se deplace dans un ficheir XML ouvert a la recherche de </Logs> et postionne le pointeur du fichiers a l'aide de fseek mais voila si la taille du fichiers depasse les 100KO la recherche prend pas mal de temps et la c'est la cata surtout que cette applciation est destineés aux environements productifs alors je voudrais savoir si vous avez des solutions pour optimizer le code de la recherche.
A Vos Les Studios
deck_bsd
Messages postés1242Date d'inscriptionjeudi 31 mars 2005StatutMembreDernière intervention 3 août 20162 14 juin 2007 à 18:26
Yop,
La source de BruNews est top il faut le dire, mais il lit les fichier Mo par Mo, hors un fichier xml ne dépasse que très rarement 1 mo, alors je pense que le fait d'allouer une variable de la taille du fichier n'est pas une tare :D . Pour ce qui est de la recherche de la balise, regarde ma cource http://www.cppfrance.com/code.aspx?ID=42940
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 14 juin 2007 à 22:36
Gaffe que avec la xmlmania actuelle qui voudrait qu'on mette tout en xml, il y en a qui atteignent des tailles énormes.
ça ralentit tout mais bon... sont contents.
ciao...
BruNews, MVP VC++
Vous n’avez pas trouvé la réponse que vous recherchez ?
xtremejames183
Messages postés32Date d'inscriptionvendredi 26 mai 2006StatutMembreDernière intervention14 avril 2009 14 juin 2007 à 22:43
oue vous avez raison XML engloutis tout.
je cherche un code en ANSI-C sinon je crois que je vais utiliser un parser genre EXPAT qui se positionne vers la fin de la balise </Logs> et renvoie la position.
Ya t'il une autre solution.
A Vos Les Studios
cs_rt15
Messages postés3874Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention 7 novembre 201413 21 juin 2007 à 15:02
Salut,
Bah la tout de suite, j'ai la flemme et pas le temps de regarder les codes des liens ci-dessus... M'enfin je suppose que le principe global reste de parcourir des buffers en RAM + un algo pas stupide pour repérer efficacement les suites de caractères recherchée.
Si tu ne recherche que </Logs>, tu as pas franchement besoin d'un truc fantastique pour trouver la suite de caractère. Genre tu parcours caractère après caractère, et si tu tombe sur un <, tu regarde le troisième après (Car ça doit être courant les < dans du xml), puis une comparaison des autre.
Pour la mise en place d'un grosse portion de fichier en RAM, regarde ça.