Recherche dans un fichier

Signaler
Messages postés
72
Date d'inscription
mardi 30 mars 2010
Statut
Membre
Dernière intervention
22 août 2011
-
Messages postés
72
Date d'inscription
mardi 30 mars 2010
Statut
Membre
Dernière intervention
22 août 2011
-
bonjour,
est ce ke kelk 1 pourrait me dire comment puis chercher un mot dans un fichier et faire une modification en langage c.
mercii d'avance.

5 réponses

Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
14
fopen() & co. pour manipuler les fichiers.
strstr() pour trouver une chaine dans une autre chaine.

Y'a plus qu'à regarder comment s'en servir !
---
VB.NET is good ... VB6 is better
Messages postés
72
Date d'inscription
mardi 30 mars 2010
Statut
Membre
Dernière intervention
22 août 2011
1
mercii bcp pour ta reponse ,mais malheureusement j' ai po bi1 compri comment faire...ben voila un bout de mon code...cé un projet de gestion pharmaceutique le prob ke j ai, cé ke je ve faire une modification du prix dans le fichier:
typedef struct medicament{
int code;
char designation[50];
char datevali[20];
int prix;
int quantirest;
struct medicament *pointeur;
}medicament;
medicament *premier=NULL;
void ajouter(medicament *premier,int code,char *datevali,char *desi,int prix,int quant)//ajouter un nouveau medicament
{
medicament *p=(medicament *)malloc(sizeof(medicament));
p->code=code;
strcpy(p->designation,desi);
strcpy(p->datevali,datevali);
p->prix=prix;
p->quantirest=quant;
p->pointeur=premier;
premier=p;
printf("ajout termin\202!!");
}
void modifierprix(medicament *premier,char *medic,int prix)//modification prix dans la memoire
{
medicament *p; p=(medicament *)malloc(sizeof(medicament));
while(p!=NULL)
{
if(strcmp(p->designation,medic)==0)
{ p->prix=prix;return ;}
else
p=p->pointeur;
}
}
void sauvegarderenstock(FILE * fichier,medicament *premier)//pour enregistrer le medicament ajouté dans un fichier
{
medicament *p=premier;

fichier=fopen("stockmedicament.txt","a+");
if(fichier!=NULL)
{
fprintf(fichier,"*************stockmedicament************");
while(p!=NULL)
{
fprintf(fichier,"========================================");
fprintf(fichier,"Nom du medicament:%s\nSon code:%d\nDate de validit\202:%s\nPrix:%d\nquantit\202 en stock:%d\n",p->designation,p->code,p->datevali,p->prix,p->quantirest);
fprintf(fichier,"=====================================");
p=p->pointeur;
}
fclose(fichier);
}
}




merciii d'avance pour votre aide
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
14
Je te conseillerai de charger au démarrage de ton appli le fichier entier dans ta structure. Ensuite quand tu veux modifier quelque chose tu le fais en mémoire et lors de la fermeture de ton programme tu réécris le fichier.
---
VB.NET is good ... VB6 is better
Messages postés
72
Date d'inscription
mardi 30 mars 2010
Statut
Membre
Dernière intervention
22 août 2011
1
d'abord mercii pour té réponse,en fait j ai deja éssayé de faire ceci mé ça marche po car dé ke je ferme la console et je ve faire lé modification il ne reconné po lé chaine ke je lui passe meme s il existet deja......donc j ai laissé tombé cette methode et j' ai essayé de procéder comme suite:
void modifichierprix(FILE *fichier,char *medi,int prix)//je ve modifier le prix d'un mmedicament deja enregistré dans le fichier
{
char chaine[MAX];int nbre=0;char caracterelu; char ret[20];
fichier=fopen("stockmedicament.txt","r+");
if(fichier==NULL) { printf("erreur d ouvreture du fichier");}
if(fichier!=NULL)
{
while(fgets(chaine,MAX,fichier)!=NULL)
{ if(strcmp(medi,chaine))
{ printf("mot trouve\n");
do
{ printf("recherche...........");//rien que pour vérifié que ça rentre dans la boucle
fseek(fichier,+sizeof(char),SEEK_CUR);
caracterelu=fgetc(fichier);
if(caracterelu='\n')
nbre++;
}while(nbre!=4);
if(nbre==4)
{fseek(fichier,-sizeof(int),SEEK_CUR);
fwrite(&prix,sizeof(int),2,fichier);
return;}
}
}
fclose(fichier);
}
}
malheureusement ça se compile mais ri1 n é modifié.............
pleaaaaaaaaaaase aidé moi ...........
Messages postés
72
Date d'inscription
mardi 30 mars 2010
Statut
Membre
Dernière intervention
22 août 2011
1
en fait j ai oublié de mentionné que dans :
if(caracterelu='\n')
nbre++;
je compte le nonmbre de retour à la ligne car j ai le prix dans la 4éme ligne........