Lire un fichier , extraire des paire de mots
Bonjour,
je suis debutante et je sais pas commment faire pour lire un fichier texte (gros de taille de 2go) en faisant l'"extraction des paire de mots voisins.
par exemple : bonjour les amis
les liste mots :
bonjour les
les amis.
merci
je programme en C
je suis debutante et je sais pas commment faire pour lire un fichier texte (gros de taille de 2go) en faisant l'"extraction des paire de mots voisins.
par exemple : bonjour les amis
les liste mots :
bonjour les
les amis.
merci
je programme en C
Configuration: Windows Vista Internet Explorer 7.0
2 réponses
-
Tu peux utiliser strtok et séparer sur les espaces. Après il faut voir comment tu gères les ponctuations.
Bonne chance-
merci mamiemando, le probleme c'est que faut mettre le mot resultatnt dans le table de hacchage, or j'arrive pas à concatener les 2 mots:
st p tu peux m'aider?
merci
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
#include <conio.h>
#define TAILLEHASH 30700
#define BUFFSIZE 64
#define FNAME "c:\\out.txt"
typedef struct L
{ int freq;
char mot[50];
struct L *suivant;
} Liste;
char* get_word(FILE *fdesc, char *buff, size_t size)
{
char *ret=NULL;
char c;
if( fdesc!=NULL && buff!=NULL && size>0 )
{
int c;
int i=0;
c=fgetc(fdesc);
printf("%c",c);
getch();
while( ret==NULL && i<size && !feof(fdesc) )
{
c=fgetc(fdesc);
printf("%c",c);
getch();
if( isalpha(c) )
{
buff[i]=c;
i++;
}
else if( i>0 )
{ /* mot */
buff[i]='\0';
ret=buff;
}
}
}
return ret;
}
void insere_table(Liste **TableHash, char mot[50]);
unsigned int hash_cle(const char mot[50]);
int main(void)
{
FILE *fdesc=fopen(FNAME,"r");
Liste **TableHash;
char res[BUFFSIZE];
if( fdesc )
{
char *buff;
char *prec;
char vide[256];
if( get_word(fdesc,prec,BUFFSIZE) )
{
while( get_word(fdesc, buff, BUFFSIZE) )
{
printf("%s %s\n",prec,buff);
//insere_table(TableHash, prec);
strncpy( prec,buff,BUFFSIZE);
} }
fclose(fdesc);
}
return 0;
}
void insere_table(Liste **TableHash, char mot[50])
{
/* calcule le hash du mot */
unsigned int idx = hash_cle(mot);
/* recherche du mot */
Liste *p = TableHash[idx];
while(p != NULL)
{
if(strcmp(p->mot, mot) == 0)
{
/* le mot est trouve */
break;
}
p =p->suivant;
}
if(p == NULL)
{
/* le mot n'existe pas, insertion de celui ci */
p = (Liste *)malloc(sizeof(Liste));
if(p == NULL)
{
/* erreur d'allocation de memoire */
printf("Erreur d'allocation mémoire\n");
exit(0);
}
/* initialisation de la structure */
p->freq = 1;
strncpy(p->mot, mot, sizeof(p->mot));
/* mise a jour des liens, insertion en debut de liste */
p->suivant = TableHash[idx];
TableHash[idx] = p;
return;
}
/* le mot existe */
/* ajout des coordonnees */
}
unsigned int hash_cle(const char mot[500])
{
unsigned int val = 0;
for(; *mot != '\0'; ++mot)
{
val = *mot + 31 * val;
}
return val % TAILLEHASH;
}
-
-
Pour concaténer des mots tu as strcat.