Récup de donnée dans un fichier text

ymlf Messages postés 8 Date d'inscription mardi 14 octobre 2003 Statut Membre Dernière intervention 2 janvier 2004 - 2 janv. 2004 à 14:33
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 2 janv. 2004 à 15:33
Je veux récupere des données dans un fichier teste qui sont contenu entre une chaine de caractere et " .

Aucun problème pour des petits fichier mais j'explose la memoire des que le fichier atteint 5k

Auriez vous une idee?

/**************************************************************************************************
Fonction lecture_fichier
Parcourt du script source VB puis recupère l'ensemble des timers du fichier
Retourne le nomnre de timer et un tableau
**************************************************************************************************/
struct timer
{
int nombre;
string nom[20];
};

/********************************** Fin de la fonction ****************************************/

timer lecture_fichier(char *chaine,char *nom_scn)
{
FILE *File;
int i = 0;
int j = 1;
int n = 0;
char tab[10000];
timer timer;
char tim[15];
char nom_fic[256];
*c;
char cheminsrc[256] ="c:\\\\progra~1\\\\citratest\\\";
strcpy(nom_fic,nom_scn);
strcat(cheminsrc,nom_fic);
strcat(cheminsrc,"\\\");
strcat(cheminsrc,nom_fic);
strcpy(nom_fic,cheminsrc);
strcat(nom_fic,".bas");
printf("\\nrecherche des timers, parcours du fichier %s.\\n", nom_fic);
memset(tab, 0, 10000); // buffer a 0
File = fopen(nom_fic, "r");
while((tab[i] = fgetc(File))!= EOF) i++; // ecrit le fichier dans le buffer
c = tab; // pointeur sur le buffer
while(c = strstr(c, chaine))
{
// c pointe sur StarTimer,ajout strlen(chaine)+3 pour pointer sur ce qu'il y a apres le "
c += strlen(chaine)+3;
i = 0;
while(*c != '"')
{
tim[i++] = *c++; // copie
}
tim[i] = 0; // zero final
printf("%s %i: %s\\n",chaine,j, tim);
timer.nom[j]=tim;
j++;
}
timer.nombre=j-1;
if( fclose( File ) )
_fcloseall();
return timer;
}

1 réponse

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
2 janv. 2004 à 15:33
Tu retournes une variable LOCALE, elle est invalide en sortie de ta fonction.
Tes variables locales sont tres grosses, procede a une alloc dynamique sinon tu risques fort de faire sauter la pile.
Pour la Xeme fois, on ne lit pas un fichier octet par octet, aspire une partie dans un buffer et traite en memoire.
BruNews, ciao...
0
Rejoignez-nous