en fait ca ma bloké cette histoire...
tiens je suis généreux :
( dsl pour la mise en page)
- include < conio.h>
- include < malloc.h>
- include < stdio.h>
- include < stdlib.h>
- include < string.h>
/ *
Libère la mémoire allouer pour les mails corrects
void freeEMail(char **ptr)
{
int j;
for(j=0;j<1000;j++)
{
free(ptr[j]);
}
return ;
}
int main(void)
{
/*
nom de fichier mail
*/
char filename[30];
FILE *f;
/*
tableau destiné a recevoir les adresse mail
*/
char *eMail[1000];
int count;
/*
buffer pour lire les adresses mail une par une dans le fichier
*/
char Buffer[512];
/*
destiné à pointé sur ´.´ si le caractère est présent dans l´adresse mail
*/
char *dot=NULL;
/*
destiné à pointé sur ´@´ si le caractère est présent dans l´adresse mail
*/
char *arobase=NULL;
//compteur
int i;
/*
saisie du nom de fichier mail
*/
printf("\nNom du fichier mail : " );
scanf("%s",filename);
//ouverture du fichier
if(NULL==(f=fopen(filename,"rt")))
{
//en cas d´echec
printf("\nErreur d´ouverture du fichier ! !!");
while(kbhit()==0);
getch();
return 1;
}
else
{
//initialise tous les pointeur avec null
//pour que free() les ignore à la sortie du programme
for(i=0;i<1000;i++)
eMail[i] = NULL;
i=0;
count=0;
//Tant que fgets() ne tombe pas sur la fin de fichier
while(fgets(Buffer,512,f)!=NULL)
{
//dot recoit l´adresse du premier . de Buffer
dot = strchr(Buffer,´.´);
//arobase recoit l´adresse du premier @ de Buffer
arobase = strchr(Buffer,´@´);
/*
test si il y a un ´.´ et un ´@´ dans Buffer et
si le . est après @
et si les deux caractères ne se trouvent pas
aux extrémités de la chaine Buffer
*/
if(dot!=NULL && arobase!=NULL
&&<dot-1
&&!=Buffer
&&<strchr(Buffer,´\n´)-1)
{
/*
si correct
alloue la memoire necessaire pour stocker
l´adresse mail et la copie
*/
eMail[count] = ( char*)malloc(strlen(Buffer));
strcpy(eMail[count],Buffer);
count++;
}
i++;
}
//fermeture du fichier mail
fclose(f);
//chtit affichage
printf("\n%d eMail corrects sur %d testes",count,i);
//ouverture du fichier de sauvegarde des mails corrects
if(NULL==(f=fopen("mailcorrect.txt","wt")))
{
//en cas d´echec
printf("Erreur d´ouverture de fichier");
while(kbhit()==0);
getch();
freeEMail(eMail);
return 1;
}
else
{
//écrit les adresse mail dans le fichier,
//une par ligne
for(i=0;i<count;i++)
{
fprintf(f,"%s",eMail[i]);
}
fclose(f);
/ / freeEMail(eMail);
printf("\nFichier corrige avec succes ! ");
}
}
//pause
while(kbhit()==0);
getch();
return 0;
}
j´ai mis l´appel a freeEMail() en commentaire parceque ca fesait buggé le programme en fin d´execution ( si qqun a une idée de ce qui se passe???)
sinon ce programme fonctionne a condition qu´il y est une adresse par ligne dans ton fichier de base,et qu´il n´y est pas plusieurs @ et . dans une meme adresse
@+