Creation d'un dictionnaire

Fermé
brainniac1 - 5 févr. 2008 à 22:00
 tcclarice - 16 févr. 2008 à 21:21
Bonjour,
Je voudrais realiser un dictionnaire de 500 mots dont les mots sont stockes dans un fichier texte.
Le probleme c'est de trouver le mot dans le fichier et d'afficher toute la ligne du mot. Je n'arrive pas.
J'ai trouve plein de sources, mais la plupart ne me dit rien parce que je ne comprend pas trop, puisque je suis debutant.
Pouvez-vous m'aider...

Merci !!!
A voir également:

14 réponses

dandypunk Messages postés 831 Date d'inscription jeudi 3 janvier 2008 Statut Membre Dernière intervention 11 septembre 2011 82
6 févr. 2008 à 22:02
Dans quel langage ?
0
cchristian Messages postés 921 Date d'inscription lundi 21 janvier 2008 Statut Membre Dernière intervention 6 mars 2012 131
6 févr. 2008 à 22:44
Bonjour,

A tout hasard si c'est en DOS je te propose cela :


echo off
set "arg_rech=bonjour" -----------> ( A remplacer par %1 probablement !)
set "Diction=fich_dict.txt" ----------- > ( Ton fichier dictionnaire.txt )
set "Flig_trouve=lign_trouv" ----------- > ( Fichier intermédiaire de stockage de la (ou des) ligne(s) trouvée(s))

@CD C:\Documents and Settings\christian\Mes Documents\Proc-perso

@IF EXIST %Flig_trouve% ( ERASE /A %Flig_trouve% )

@FINDSTR /C:%arg_rech% %Diction% > %Flig_trouve%
@ SET "message=argument de recherche inconnu dans le dictionnaire"
@FOR /F "tokens=1,3* delims= " %%i in (%Flig_trouve%) DO (
@ECHO %%i
@ SET "message=")

@ECHO %message%

@CD C:\Program Files\IBM\SQLLIB\BIN\CMDE_perso
0
Merci, les gars... mais desole j'ai oublie de specifier c'est en programmation C...
0
cchristian Messages postés 921 Date d'inscription lundi 21 janvier 2008 Statut Membre Dernière intervention 6 mars 2012 131
7 févr. 2008 à 03:20
Bonsoir,

- La traitement suivant suppose que la clé se trouve au début de chaque ligne de ton fichier .txt
exemple :
BONJOUR abcdef..................................................... (sans espace précédant la clé).
- Il n'est pas nécessaire de saisir la totalité de la clé. Exemple une recherche surle libellé
"BONJOUR" donnera le même résultat qu'une recherche sur" BONJ" . Est-ce ce que tu
souhaites ?
- J'ai distingué les majuscules des minuscules,.une recherche sur le libellé "BONJOUR"
ne donnera pas le même résultat qu'une recherche sur le libellé ""bonjour" ou "BoNjOuR".
- Si il existe plusieurs lignes de clés identiques dans le fichier elles seront toutes affichées.

Je pense que tu peux tester ce programme tel qu'il est. Il est suffisamment classique (peut-être
les "cout" sont à remplacer par des "printf" ?) Chez moi ça a tourné.

int main ()
{
FILE *streamfile ;

//Les variables suivantes simulent l'environnement dans lequel tu intégreras l'algo. Par exemple je
// n'ai pas présumé du moyen grâce auquel tu intègres la valeur de la clé (ici: "BONJOUR")
char enreg_inout [4096] = "" ;
char cle_cherchee [64] = "BONJOUR" ;
char NOM_FICH [16] = "Test.txt";
int LONG_ENREG = 80;
char cle_lue [64] = "" ;
// ---------------------------------------------------------------------------


//Ces variables ne sont pas concernées par ce qui précède.
errno_t err ;
char ORDRE_ACCES [8] = "r";
char MESSAGE [80] =
"\n\nAUCUNE VALEUR DE CLE NE CORRESPOND A LA REQUETE : " ;
int indic_trouve = 0 ;



FILE *stream ;

//Ouverture de ton fichier .txt

IF ((err = FOPEN_S (&streamfile, NOM_FICH, ORDRE_ACCES )) != 0)
{ printf("\nLe fichier : %s n'a pas été ouvert CAUSE : err = %u sur mode"
" : %s ARRET DU TRAITEMENT : %s\n" ,NOM_FICH, err, ORDRE_ACCES);
exit (1);
}

//Lectue de chaque enregistrement (chaque ligne), recherche d'égalité
// entre la cle lue et la clé cherchée et affichage de chaque line trouvée.
//Si aucune correspondance entre les clés n'est trouvée, affichage d 'un message d'information.

indic_trouve = 0;
while (feof (streamfile) == 0)
{ fgets (enreg_inout, LONG_ENREG + 0, streamfile);
strncpy (cle_lue, 512, enreg_inout, strlen (cle_cherchee));
IF (strcmp (cle_lue, cle_cherchee) == 0) {indic_trouve = 1; cout <<"\n"<<enreg_inout;}
}

if (indic_trouve == 0) {cout <<"\n"<<MESSAGE<<cle_cherchee<<"\n\n";}

//Fermeture de ton fichier .txt

IF ((err = fclose (streamfile)) !=0 )
{ printf( "\nLe fichier : %s n'a pas été fermé CAUSE : err = %u "
"ARRET DU TRAITEMENT : %s \n", NOM_FICH, err) ;
exit (2);
}
return (0) ;
}

Si tu rencontres des problèmes n'hésite pas, j'essaierai de t'aider.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Merci...
J'ai peut etre une petite idee la... je vais essayer encore une fois de faire quelque test...
par contre a quoi sert streamfile?
0
dandypunk Messages postés 831 Date d'inscription jeudi 3 janvier 2008 Statut Membre Dernière intervention 11 septembre 2011 82
7 févr. 2008 à 04:33
Je passe la main à branniaci mais je reste à ta disposition.
0
cchristian Messages postés 921 Date d'inscription lundi 21 janvier 2008 Statut Membre Dernière intervention 6 mars 2012 131
7 févr. 2008 à 16:01
Bon,jour,

Je ne suis pas certain de très bien suivre la discussion, on en est où exactement ?
0
cchristian Messages postés 921 Date d'inscription lundi 21 janvier 2008 Statut Membre Dernière intervention 6 mars 2012 131
7 févr. 2008 à 18:22
Bonjour,

Quelques précisions :

*streamfile est un pointeur (nom choisi par moi en l'occurrence) adressant la structure et les ressources associées
à la notion de fichier.
Stream signifie flot (de données) et plus particuièrement en informamtique et de manière générale, ce qui est mis en
oeuvre (notamment le(s) buffer(s) I/O) pour aquérir des données venant d'un périphérique (INPUT) ou pour les diriger
vers un périphérique (OUTPUT).

FILE *stream est en trop, il ne sert à rien, (il s'est inscrit "subrepticement" dans un copier/coller de dernière minute ....)

{ fgets (enreg_inout, LONG_ENREG + 0, streamfile);
J'ai laissé LONG_ENREG + 0 de manière à attirer l'attention sur la necessité de faire +1 sur la longueur soit à l'initialisation de LONG_ENREG soit à ce niveau. Ce qui fait que mon "code" ne récupère que 79 octets sur 80, je viens de m'en apercevoir.
0
Bonjour,
Volia, avec tous vos suggestion, j'ai realise ceci:
Ca marche mais, j'ai un probleme dans la saisi des donnees.....

//pour enregistrer les mots dans le fichier


#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
struct dictionnaire
{ char mot[15];
char def[50];
};
struct dictionnaire d;
main(){
FILE*fichier=NULL;
fichier=fopen("test1.txt","a");
int i;
char rep='o';

do
{
if (fichier != NULL)
{ printf("Entrer le mot: ");
gets(d.mot);
printf("Entrer la definition: ");
gets(d.def);
fprintf(fichier,"\n%s",&d.mot );
fprintf(fichier,"\n%s",&d.def );
puts("\n\nVoulez-vous entrer un autre mot?--tapez 'c' pour continuer, 'n' pour arreter.");

rep=getchar( );
fclose(fichier);
}
else
printf("Ce fichier n'exise pas");
}
while(rep!='n');


getch();

}

//Dans cette partie, si j'ai besoins de continuer ajouter des mots, ca donne des prob. Bon, je vais essayer de trouver une solution. C'est minime comme prob.

//Pour rechercher les mots, bon je les ai realise a part....



struct dictionnaire
{ char mot[15];
char def[50];
};
struct dictionnaire d;
char a[25];
int i=0;
main(){

FILE*fichier=NULL;
//clrscr();
fichier=fopen("test1.txt","r");
if (fichier == NULL)
{
printf("Le fichier n'existe pas: ");
exit(-1);
}
else
{ printf("Entrer le mot a rechercher : ");
gets(a);
do
{
fscanf(fichier,"%s",d.mot);
// printf("Le mot : %s\n",&d.mot);
fgets(d.def,50,fichier);
// printf("La definition : %s",&d.def);
if(strcmp(a,d.mot)==0)
{
printf("Le mot : %s\n",&d.mot);
fgets(d.def,50,fichier);
printf("La definition : %s",&d.def);
i=1;
}
} while(!feof(fichier));
fclose(fichier);
if (i==0)
printf("Ce mot n'est pas dans le dictionnaire");
// fclose(fichier);
}
getch();

}

/// Pour tout vous dire, ce qui reste a faire c'est d'ajouter les mots et de perfectionner le programme....
Bon, c'a c'est une autre chose. Maintenant je vais chercher comment ajouter une image chaque fois que je demande une definition.
En tout cas, je voulais vous presenter le fruit de vos efforts....
Merci, bcp.

Cordialement
Brainniac1

:) ^_^
0
cchristian Messages postés 921 Date d'inscription lundi 21 janvier 2008 Statut Membre Dernière intervention 6 mars 2012 131
8 févr. 2008 à 02:05
Bonsoir,

Merci à toi de nous tenir informés. J'ai fait tourner la deuxième partie de ton code, il y a 2 ou 3 petits problèmes sans gravité, je te laisse les trouver, si ce n'est déjà fait.
Je vais essayer de trouver un peu de temps pour voir la première partie.
0
cchristian Messages postés 921 Date d'inscription lundi 21 janvier 2008 Statut Membre Dernière intervention 6 mars 2012 131
8 févr. 2008 à 06:10
Bonjour,

Essaie cela ! Je n'ai pas eu le temps de trop pousser les tests car il est tard ou tôt !

struct dictionnaire
{ char mot[30]; //Attention à ne pas dépasser en saisie ls valeurs maximales (30 et 50)
char def[50]; // sinon ça plante, il faudra prévoir des tests de protection pour ces 2 zones de saisie!
};
struct dictionnaire d;
int main()
{

FILE *fichier=NULL;

char rep='o';
errno_t err ;

if ((err = fopen_s ( &fichier, "test.txt", "a+" )) != 0) // Si le nom du fichier est inconnu ça ne sort pas en anomalie ?
{ printf("\n\n Ce fichier n'exise pas ");
exit (1);
}
else
{
while(rep!='n')
{
printf("\nEntrer le mot: ");
gets_s (d.mot);
printf("\nEntrer la definition: ");
gets_s (d.def);
if (strlen (d.mot) + strlen (d.def) > 0)
{
strcat (d.mot, 512, " ");
strcat (d.mot, 512, d.def);
fprintf(fichier,"\n%s",&d.mot );
}
rep = 'o';
while (rep != 'n' && rep != 'c')
{
puts("\nVoulez-vous entrer un autre mot?--tapez 'c' pour continuer, 'n' pour arreter.");
rep = _getch ();
}
}
fclose(fichier); // A compléter avec un test de validité (idem open)
}
return (0);
}
0
Desole, si j'ai pris tout ce temps pour repondre... j'etais entrain de chercher un moyen pour afficher les images qui vont avec le mot du dico.
Pour les bugs, qu'il y avaient, bon c'est du passe... Il y en a de nouveau mainteant, parce que j'ai tout mis dans un projet alors ca, c'est a moi de le faire... je pense pas c'est complique.... merci de me l'avoir signale, par contre. Parce qu'avant je n'avais pas remarquer les erreurs, que ca generait. Bon pour l'instant je ne peux pas rechercher carte mere par exemple, mais bon peu importe. C'est deja bcp d'accomplie pour un debutant.

:) Encore merci.

Maintenant , je passe a l'affichage d'image.
0
cchristian Messages postés 921 Date d'inscription lundi 21 janvier 2008 Statut Membre Dernière intervention 6 mars 2012 131
13 févr. 2008 à 00:20
Bonjour,

Ce n'est pas grave, j'ai moi-même dû m'absenter quelques jours. Bon courage pour l'affichage d'images, tiens-nous au courant de tes résultats si tu le peux.
0
je veux la programmation en java
0