Lacharlottinne
Messages postés5Date d'inscriptionsamedi 8 juin 2002StatutMembreDernière intervention15 mai 2005
-
14 mai 2005 à 21:24
Lacharlottinne
Messages postés5Date d'inscriptionsamedi 8 juin 2002StatutMembreDernière intervention15 mai 2005
-
15 mai 2005 à 15:14
Bonjour , je vous explique vite fait ce que je dois faire :
J'ai un fichier texte, dans le quel on doit trier des mots ..
la premier étape est => ouverture d'un fichier
la deuxieme étape est => lit mot par mot et rentre le dans un tableau
cs_Matt67
Messages postés549Date d'inscriptionsamedi 6 septembre 2003StatutMembreDernière intervention 6 mars 20103 15 mai 2005 à 15:11
Bonjour,
Dans la liste de tes séparateurs n'aurais tu pas oublié l'espace ???
Sinon, ton fichier à "parser" est il gros ? Car la taille de ton tableau est très grande. (256 + 4 + 4) * 1000000 octets...
Pourquoi tu ne charges pas directement (en fonction de la taille bien
sur) ton fichier en mémoire et tu peux ainsi travaille avec, par
exemple, strtok pour récuperer tes mots.
while (f==NULL)
{
printf ("Entrer le chemin du fichier\n");
scanf ("%s",fichier);
f=fopen(fichier,"r");
if (f==NULL)
{
printf ("/!\\ Erreur: Probleme d'ouverture en lecture /!\\ \n");
}
else
{
printf ("Ouverture reussite !! \n ");
printf ("\n");
}
}
}
/*
---------- Renvoie la position du dernier octets du flot stream-----------------
*/
long filesize(FILE *stream)
{
long curpos,length;
curpos = ftell(stream); // garder la position courante
fseek(stream, 0, SEEK_END); // on place le curseur a la fin
length = ftell(stream); // on prend le nombre de caractères dans la fichier (ie la taille)
fseek (stream, curpos, SEEK_SET); // on remet comme c'était au début
return length; // on retourne la taille du fichier (en octet ie en nombre de char)
}
/*
------------------------Detecte un caratere dans un tableau---------------------
*/
int SearchCara (char c,char tab[],int i)
{
if (tab[i]=='\0')
{
return 0; // à cet endroit tu es à la fin du fichier
}
else
{
if (tab[i] == c)
{
return 1; // à cet endroit tu as trouvé un caractere
}
else
{
return SearchCara (c, tab, i+1); // Sinon continue
}
}
}
/*
----------Converti Majuscule => Minscule + retire la ponctuation----------------
*/
void convert(char c[])
{
int i;
for(i=0; i<strlen(c); i++)
{
c[i]=tolower(c[i]); // passe les caractères en minuscules
}
}
void extraction ()
{
char motlu[256];
char c;
int trouve;
int i=0,k=0;
while (!feof(f))
{
fscanf (f, "%c", &c);
while ((SearchCara(c, sep, 0)) && (!feof(f)) )
{
fscanf(f,"%c", &c) ;
}
i=0 ;
while ((!SearchCara(c, sep, 0)) && (!feof(f))) // Tant que le caractere n'est pas un séparateur
{
motlu[i]=c;
fscanf (f, "%c", &c); // On enregistre le motlu dans un tableau motlu
i++;
}
convert(motlu); // enleve les majuscules
motlu[i]='\0';
k=0;
if (strcmp(motlu,"")!=0)
{
trouve = 0;
while ( (k < nb_mots) && (trouve==0)) // tant que le que tu n'a pas parcouru tout les mots
{
if ( strcmp(tableau[k].mot, motlu) == 0)
{
tableau[k].frequence++; // Si le mot en question est présent, on augmente la frequence de + 1
trouve=1;
}
k++;
}
if ( trouve == 0)
{
struct mot_frequence aux ;
strcpy (aux.mot, motlu); // Si on a pas trouvé le mot en question, on le place à la fin du tableau
aux.frequence = 1;
tableau[nb_mots] = aux ;
printf ("%s\n", tableau[nb_mots].mot);