Lire un fichier , extraire des paire de mots

Fermé
stroumpf Messages postés 289 Date d'inscription mardi 17 juin 2008 Statut Membre Dernière intervention 1 mars 2009 - 18 sept. 2008 à 22:26
mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 - 19 sept. 2008 à 10:15
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
A voir également:

2 réponses

mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 7 812
19 sept. 2008 à 09:56
Tu peux utiliser strtok et séparer sur les espaces. Après il faut voir comment tu gères les ponctuations.

Bonne chance
-1
stroumpf Messages postés 289 Date d'inscription mardi 17 juin 2008 Statut Membre Dernière intervention 1 mars 2009 2
19 sept. 2008 à 10:10
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;
}
-1
mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 7 812
19 sept. 2008 à 10:15
Pour concaténer des mots tu as strcat.
-1