begin process at 2012 05 29 23:03:45
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

Lecture d'un fichier et probleme divers


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Lecture d'un fichier et probleme divers

samedi 14 mai 2005 à 21:24:56 | Lecture d'un fichier et probleme divers

lacharlottinne

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
si il est present ajoute à la frequence plus 1
sinon ajoute le au tableau

Il y a une erreur mais je ne la trouve pas

Voici le code source

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <ctype.h>

/*
-------------------------------------Declaration--------------------------------
*/


int trouve;
int N,i;
char word[256]; // word est le mot lu
struct mot_frequence
{
       char mot[180000];
       int frequence;
};
struct mot_frequence tableau[10000];
FILE *f1;



/*
----------------------Commande l'ouverture d'un fichier-------------------------
*/
void ouverture (FILE *f)
{
     char fichier[32];
     FILE *f1=NULL;

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 /!\ ");
        }
        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 la ponctuation-----------------------------
*/

int estseparateur(char c)
{
    char sep[]=".,;:!?\n\t\r\'\"\[]\0";
    char *sz;
   
    sz=sep;
    while(*sz!=0)
    {
        if(c==*sz) return 1;        // c est un caractere séparateur, on renvoie donc true
        sz++;
    }
   
    return 0;                        // c n'est pas un caractère séparateur, on renvoie donc false
}

/*
----------Converti Majuscule => Minscule + retire la ponctuation----------------
*/

void convert(char tab [])
{

    char *sz;
    sz=tab;
    while(*sz != 0)
    {
        if(('A' <= *sz)&&(*sz<='Z')) // si le pointeur fait parti des majuscules compris entre A et Z  alors remplace le par une minusule
            *sz = 'a' + (*sz - 'A');
       
        if(estseparateur(*sz)==1) *sz=' '; //si le caractere est un separateur remplace le par un espace
       
        sz++;
    }
}
/*
------------------------------Comptage des mots---------------------------------
*/
void comptage(FILE *f)
{
     int i=0;
     int N=0; // N étant le nombre de mot
     char word[32];
     for(i=0,N=0; !feof(f); i++)
     {
        fscanf(f, "%s", word);
        //printf("word=%s\n",word); pour verifier si il affiche bien les mots
        N++;
     }
}
        


/*
-------------------------------Programme principale-----------------------------
*/

int main()
{
trouve == 1;
ouverture(f1);
//comptage(f1); <= fonctionne pas



/**
***              EXTRACTION 
**/

for(i=0;feof(f1);i++)
{
                  
        fscanf(f1, "%s", word); // prend un mot et met le dans le tableau word
        convert(word); // enleve les majuscules et la ponctuation
       
        if ( strcmp ((char *) word,tableau[i].mot) ) // Regarde si le mot est pas déjà dans le tableau
        {
                  trouve = 1;  // si oui
                  tableau[i].frequence++; // augmente sa frequence de + 1
        }
       
        else
        {
            strcpy (word,tableau[i].mot); // sinon ajoute le au tableau
            tableau[i].frequence++; // et augment sa frequence
        }
       
        printf ("%s : %d",tableau[i].mot,tableau[i].frequence); // affiche le resultat
}


return 0;
system("pause");
}

Voici mon mail : lacharlottinne@aol.com
et mon adresse msn : lacharlottinne@hotmail.com ( si vous preferez passer par la pour m'aider :)

Je vous remercie beaucoup :)
samedi 14 mai 2005 à 21:50:20 | Re : Lecture d'un fichier et probleme divers

mezaya

j'ai pas regarder ton code en détail mais ton struct "mot_frequence" tu veut que "tableau" soit un tableau de chaine de caractère ?

car si c'est le cas ton "tableau" est un tableau 1 seul caratère. si tu veut avoir une chaine tu dois le déclaré comme ça :

char*  tableau[180000];

et attention aux allocations mémoire.

Voili,Voilou
samedi 14 mai 2005 à 21:56:48 | Re : Lecture d'un fichier et probleme divers

lacharlottinne

bah je v faire un tableau de structure

je sais pas cmt ca marche la déclaration de tableau de structure
samedi 14 mai 2005 à 22:07:11 | Re : Lecture d'un fichier et probleme divers

mezaya

non c'est pas ça que je dis, tu dois faire un tableau de chaine de caractère donc avec :

char* tableau[180000];

ou "tableau" est un tableau de pointeur "pointant" sur un word.

Voili,Voilou
samedi 14 mai 2005 à 22:36:54 | Re : Lecture d'un fichier et probleme divers

Matt67

Bonsoir,

    Tu n'y vas pas par le dos de la cueillere pour tes tableaux 180000 x 10000 car un mot de 180000 caracteres balaize, Admettons.

As tu compilé ton code, car chez moi, il ne compile pas, poste un code qui compile...

Matt...
dimanche 15 mai 2005 à 11:22:50 | Re : Lecture d'un fichier et probleme divers

lacharlottinne

voici un code qui compile je ne comprends pas pk , il m'affiche pas le bon nombre de mot dans un texte et pourquoi il ne les distingues pas bien

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <ctype.h>
#define N 1000000
/*
-------------------------------------Declaration--------------------------------
*/

FILE *f;
int size;
char sep[15]=".,;:!?\n\t\r\'\"\[]\0";


struct mot_frequence
{
       char mot[256];
       int frequence;
       int taille;
       
};
struct mot_frequence tableau[N];

int nb_mots=0;
FILE *f1=NULL;

/*
----------------------Commande l'ouverture d'un fichier-------------------------
*/
void ouverture ()
{
     char fichier[32];

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
     }
}


/*
---------------------------------Extraction-------------------------------------
*/

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);
       
                   tableau[nb_mots].taille=strlen(tableau[nb_mots].mot);
       
                   nb_mots++;
               }
           }   
        
     }  
}  


/*
-------------------------------Programme principale-----------------------------
*/
int i;
int main()
{
   
    ouverture();
    extraction(f);
   
    system("pause");
    return 0;
}

dimanche 15 mai 2005 à 15:11:45 | Re : Lecture d'un fichier et probleme divers

Matt67

Réponse acceptée !
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.

Matt...
dimanche 15 mai 2005 à 15:14:45 | Re : Lecture d'un fichier et probleme divers

lacharlottinne

Exacte ca marche mieux :) je suis débutante ca fais à peine 3 semaines que j'en fais merci bcq :)



Cette discussion est classée dans : fichier, mot, tableau, char, sz


Répondre à ce message

Sujets en rapport avec ce message

ça concerne la lecture et l'ecriture sur un fichier et ... [ par wfish ] voila mon pb :j'ai fais un ptit prog de traitement de fichier. il sert à mettre certaines infos prises dans un fichier et les mettre dans un autre !!1 Pointeurs et tableau de pointeurs [ par dragon3x6 ] Salut à la communauté des developpeurs C,j'essai d'écrire un bout de code qui enregistre une liste de mots dans une structure de type arbre.Lorsqu'un test sur variable de type char [ par enrageur ] j'aimerais indetifier des mots dans un fichier txt. J'ouvre le fichier et je le copy dans un char (data). Ensuite je fais un test pour voir si les deu Probleme dans mon prog password dans la gestion ' * ' [ par Jarod1980 ] Salut,Voila j'ai développé un programme de password qui récupère le password crypté dans un fichier et le compare au password rentré par l'utilisateur Probleme dans mon programme password [ par Jarod1980 ] Salut tout le monde,Voilà j'ai un problème dans mon programme de password. Je m'explique: J'ai développé en premier lieu un programme où l'utilisateur passage de valeurs de fonction a fonction [ par binoua ] salut à tous,Je débute en c++ et je n'arrive pas à faire le truc de base. En fait dans ma fonction principale je rentre le nom d'un fichier puis je di WinExec et temps d'exécution d'une commande dos [ par maxidoh ] Bonsoir,je fais un programme sous Borland C++ Builder qui va lancer des requêtes ping et traceroute sous windows.Je lance l'exécution des ping et trac Charger un fichier dans un tableau de char [ par hitaki zoran ] Bonjour, j'ai commencé à développer en C++ il y a peu de temps et j'ai besoin d'aide pour deux choses:1. J'aimerais savoir comment je peux charger un Pointeurs et tableau de char ? [ par phyyl ] Bonjour ! J'ai un petit soucis ... voici mon code: [code=cpp] #include using namespace std; void modify(char* ptr[]); int main() { char mot[]= passer un tableau de chaines à 2 dimention comme argument d'une fonction [ par boujerra ] bonjour à tous mon probleme est le suivant je veux passer en parametre d'une fonction un tableau à 2 dimention au cour de la fonction main tout se pas


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,154 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales