Lire un fichier , extraire des paire de mots

stroumpf Messages postés 292 Statut Membre -  
mamiemando Messages postés 33174 Date d'inscription   Statut Modérateur Dernière intervention   -
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
Configuration: Windows Vista
Internet Explorer 7.0

2 réponses

  1. mamiemando Messages postés 33174 Date d'inscription   Statut Modérateur Dernière intervention   7 944
     
    Tu peux utiliser strtok et séparer sur les espaces. Après il faut voir comment tu gères les ponctuations.

    Bonne chance
    -1
    1. stroumpf Messages postés 292 Statut Membre 2
       
      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
  2. mamiemando Messages postés 33174 Date d'inscription   Statut Modérateur Dernière intervention   7 944
     
    Pour concaténer des mots tu as strcat.
    -1