Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

TEXT GO V 3.0 :UTILISATION DES ABR POUR LES FICHIERS TEXT !!!


Information sur la source

Catégorie :Chaîne de caractères Niveau : Débutant Date de création : 30/07/2004 Date de mise à jour : 30/07/2004 17:32:20 Vu / téléchargé: 2 697 / 324

Note :
8 / 10 - par 1 personne
8,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (10)
Ajouter un commentaire et/ou une note

Description

ABR :Arbre binaire de recherche pour extraires les Mots d'un fichier text.
Grace au ABR on peut effectuer des recherche trés rapide plus rapides que les
tableau ou les listes chainées .
Pour cette verison :j'ai ajouter la fonction  de recherche d'une partite d'un Mot
Ce programmes affcihe aussi le nombres de mots ainsi que les occurences des mots
et les lignes ou il sont trouve ....
 

Source

  • ZIP :Dans le ZIP il y'a un programmes supplimentaires (Comprendre_plus)
  • pour comprendres mieux la recherche d'une partie d'un mots. ;-)
ZIP :Dans le ZIP il y'a  un programmes supplimentaires (Comprendre_plus)
pour comprendres mieux la recherche d'une partie  d'un mots. ;-)

Conclusion

Normallement c'est   la derniere Version de ce projet :
NB :J'ai voulu  ajoute la nouvelle fonction (recherche d'une partie d'un mot)
dans ce programme au lieux de la mettre a part parce que j'ai pense ca serait mieux .....;-)
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Historique

30 juillet 2004 17:32:20 :
La derniere Version De TEXT GO.

Commentaires et avis

signaler à un administrateur
Commentaire de Maegis le 02/08/2004 11:23:46

J'ai n'ai pas encore regardé le code en entier mais j'ai vu que tu lisais le fichier caractère par caractère! Ca réduit les performances de manière conséquente. Utilise un buffer!

signaler à un administrateur
Commentaire de brenntengel le 02/08/2004 12:33:16

Merci bq pour le commentaire.
pour la lecture de fichier  j'ai lu caractère par caractère  
parceque il faut que je determine le nombres de mots ainsi que le nombres des lignes et aussi la ligne ou ce trouve chaque mots.

Comment tu utilise un buffer dans ce cas ?

ce code ce base sur l'utilisation des ABR(arbre binaire de recherche)

pour chercher un mot avec une vitesse  tres importante
d'apres la longueur de mots on se positione dans le noeuds et on cherche dans cette sous arbre.et puis on compare les caractères
je te laise decouvrir le reste ...;-)


signaler à un administrateur
Commentaire de DevGizmo le 02/08/2004 13:18:45

Effectivement,
Mais pourquoi ne pas utiliser "strtok" pour decouper la chaine selon les blancs (et donc les mots).

Tu "malloc" un buffer a la taille du fichier (+1 pour le null terminate) et ensuite tu fais du strtok, a chaque tour de boucle du strtok tu peux incrementer un compteur pour le nombre de mot et si dans le morceux extrait il y a une LINE FEED, tu peux comptabiliser aussi une ligne supplementaire...

Je n'ai pas vu ton code mais je pense que je ferais comme ca.

@+ et bonne prog

signaler à un administrateur
Commentaire de DevGizmo le 02/08/2004 14:54:47

Tiens essaye donc ca...
A priori ca fonctionne...........

unsigned long MyGetFileSize(FILE *hFile)
{
unsigned long lSize = 0; // On init la taille du fichier
long lCurrPos = ftell( hFile ); // On recupere la position du curseur de fichier

// On se positionne a la fin du fichier
fseek( hFile, 0, SEEK_END );

// On recupere la position du curseur de fichier et donc la taille en octets du fichier
lSize = ftell( hFile );

// On se replace la ou ete le curseur dans le fichier
fseek( hFile, lCurrPos, SEEK_SET );

// On retourne la taille du fichier
return lSize;
}

void Loading_File(unsigned long *lpNbWord, unsigned long *lpNbLine)
{
FILE *hFile = NULL;
char szFileName[MAX_PATH];
char *lpFile = NULL;
char *lpRead = NULL;
unsigned long lFSize = 0;
unsigned long lNbLine = 1;
unsigned long lNbWord = 0;
BOOL bStop = false;
tMots tmMots;

do
{
printf("Donner le chemin de fichier SRC . . .\n");

// On lit le flux de la console
        scanf("%s", szFileName);

// On essaye d'ouvrir le fichier passe
hFile = fopen(szFileName,"r+b");                 //ouvrir un ficher

// Si le fichier n'existe pas
if(hFile == NULL)
printf( "Fichier inexistant !!!\n" );

} while(hFile == NULL);

// On recupere la taille du fichier
lFSize = MyGetFileSize( hFile );

// Protection si le fichier est vide
if( lFSize <= 0 )
return;

// On alloue un buffer a la taille du fichier +1 pour le null terminate
lpFile = (char *)malloc( lFSize + 1 );

// On n'a pas reussi a allouer le buffer, on ferme le fichier et on sort...
if( lpFile == NULL )
{
fclose( hFile );
return;
}

// On nettoie le buffer
memset( lpFile, 0, lFSize + 1 );

// On lit le fichier d'un seul bloc et on le met dans le buffer alloue
if( !fread( lpFile, lFSize, 1, hFile ) )
{
// si ca se passe mal: on desalloue le buffer et on ferme
// le fichier avant de sortir
free( lpFile );
fclose( hFile );
return;
}
// On ferme le fichier, il n'y a plus besoin qu'il soit ouvert
fclose( hFile );

// On recupere le premier mot
lpRead = strtok( (char *)lpFile, " " );

// Si il n'existe pas, on desalloue le buffer et on sort
if( lpRead == NULL)
{
free( lpFile );
return;
}

// On a recupere le premier mot
lNbWord++;

// On recupere le mot en cour
strcpy( tmMots.mot, lpRead );

// on recupere la ligne dans laquelle se trouve le mot
tmMots.Line = lNbLine;

// On recupere la taille du mot
tmMots.Long = strlen(lpRead);

// On ajoute le mot a l'arbre
arbre = Creation_Arbre( arbre, tmMots );

while( true )
{
// On recupere le mot suivant
lpRead = strtok( NULL, " " );
if( lpRead == NULL )
break;

// On a trouve un mot de plus
lNbWord++;

// On recupere le mot en cour
strcpy( tmMots.mot, lpRead );

// On recupere la ligne dans laquelle se trouve le mot
tmMots.Line = lNbLine;

// On recupere la taille du mot
tmMots.Long = strlen(lpRead);

// On ajoute le mot a l'arbre
arbre = Creation_Arbre( arbre, tmMots );

// Si dans on trouve un line feed
if( strstr( lpRead, "\r") != NULL )
lNbLine++;
}

// On desalloue le buffer
free( lpFile );

// On renseigne les params
*lpNbLine = lNbLine;
*lpNbWord = lNbWord;
}

signaler à un administrateur
Commentaire de DevGizmo le 02/08/2004 14:55:31

<pre>
unsigned long MyGetFileSize(FILE *hFile)
{
unsigned long lSize = 0; // On init la taille du fichier
long lCurrPos = ftell( hFile ); // On recupere la position du curseur de fichier

// On se positionne a la fin du fichier
fseek( hFile, 0, SEEK_END );

// On recupere la position du curseur de fichier et donc la taille en octets du fichier
lSize = ftell( hFile );

// On se replace la ou ete le curseur dans le fichier
fseek( hFile, lCurrPos, SEEK_SET );

// On retourne la taille du fichier
return lSize;
}

void Loading_File(unsigned long *lpNbWord, unsigned long *lpNbLine)
{
FILE *hFile = NULL;
char szFileName[MAX_PATH];
char *lpFile = NULL;
char *lpRead = NULL;
unsigned long lFSize = 0;
unsigned long lNbLine = 1;
unsigned long lNbWord = 0;
BOOL bStop = false;
tMots tmMots;

do
{
printf("Donner le chemin de fichier SRC . . .\n");

// On lit le flux de la console
        scanf("%s", szFileName);

// On essaye d'ouvrir le fichier passe
hFile = fopen(szFileName,"r+b");                 //ouvrir un ficher

// Si le fichier n'existe pas
if(hFile == NULL)
printf( "Fichier inexistant !!!\n" );

} while(hFile == NULL);

// On recupere la taille du fichier
lFSize = MyGetFileSize( hFile );

// Protection si le fichier est vide
if( lFSize <= 0 )
return;

// On alloue un buffer a la taille du fichier +1 pour le null terminate
lpFile = (char *)malloc( lFSize + 1 );

// On n'a pas reussi a allouer le buffer, on ferme le fichier et on sort...
if( lpFile == NULL )
{
fclose( hFile );
return;
}

// On nettoie le buffer
memset( lpFile, 0, lFSize + 1 );

// On lit le fichier d'un seul bloc et on le met dans le buffer alloue
if( !fread( lpFile, lFSize, 1, hFile ) )
{
// si ca se passe mal: on desalloue le buffer et on ferme
// le fichier avant de sortir
free( lpFile );
fclose( hFile );
return;
}
// On ferme le fichier, il n'y a plus besoin qu'il soit ouvert
fclose( hFile );

// On recupere le premier mot
lpRead = strtok( (char *)lpFile, " " );

// Si il n'existe pas, on desalloue le buffer et on sort
if( lpRead == NULL)
{
free( lpFile );
return;
}

// On a recupere le premier mot
lNbWord++;

// On recupere le mot en cour
strcpy( tmMots.mot, lpRead );

// on recupere la ligne dans laquelle se trouve le mot
tmMots.Line = lNbLine;

// On recupere la taille du mot
tmMots.Long = strlen(lpRead);

// On ajoute le mot a l'arbre
arbre = Creation_Arbre( arbre, tmMots );

while( true )
{
// On recupere le mot suivant
lpRead = strtok( NULL, " " );
if( lpRead == NULL )
break;

// On a trouve un mot de plus
lNbWord++;

// On recupere le mot en cour
strcpy( tmMots.mot, lpRead );

// On recupere la ligne dans laquelle se trouve le mot
tmMots.Line = lNbLine;

// On recupere la taille du mot
tmMots.Long = strlen(lpRead);

// On ajoute le mot a l'arbre
arbre = Creation_Arbre( arbre, tmMots );

// Si dans on trouve un line feed
if( strstr( lpRead, "\r") != NULL )
lNbLine++;
}

// On desalloue le buffer
free( lpFile );

// On renseigne les params
*lpNbLine = lNbLine;
*lpNbWord = lNbWord;
}
</pre>

signaler à un administrateur
Commentaire de brenntengel le 04/08/2004 12:54:10


Merci bq pour le commontaire !!
J'avous que c'est la 1ere fois que je vois
la commande strtok.j'ai trouver un exemple
dans le help et j'ai compris le fonctionnement,
et ca reduit bq mon code ca c'est sure !!
j'ai vu ton code mais j'ai pas fini ca me semble
interesante.ta methode est bien meilleur
que la mienne je l'avous
(si ca marche chapeau vraiment !!!)

Essaye de regrder la 2eme partie et la 3eme
elle sont plus interressante !!!

Allez A+ et merci pour la methode je vais
l'adopter !!;-)



signaler à un administrateur
Commentaire de Yolak le 28/03/2007 09:41:44

Bonjour !
Je suis pas très fort en C mais je crois bien qu'il manque une fonction dans le programme Text GO.
j'utilise dev cpp et il me dit que "toupper" n'est pas déclaré, et en effet sa déclaration ne figure nulle part.
Quelle est l'utilitée de ce "toupper"??

signaler à un administrateur
Commentaire de brenntengel le 28/03/2007 14:36:33

Salut,
ToUpper c'est une fonction predefine dans la librarie "ctype.h"
elle permet de verifier si un carractere est en Majuscule ou non :-)
a propo le programme marche bien compile le avec MSVC++
ca devrait marché sans probleme.

signaler à un administrateur
Commentaire de Yolak le 28/03/2007 15:22:19

Effectivement, j'ai rajouté la bibliothèque et fait quelques modifs et ça marche plutôt bien!¨!
Parcontre, les fautes d'orthographes sont assez énormes!!!

signaler à un administrateur
Commentaire de brenntengel le 28/03/2007 16:16:00

:-O Désole pour les fautes d'orthographes !!!
j'espre que ca marche bien mnt !!

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, 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
Temps d'éxécution de la page : 0,234 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.