Les fichiers en C ANSI

Les fichiers en C ANSI - Programmation

Marsh Posté le 12-01-2001 à 20:47:18    

Voilà, voilà, je ne suis pas une bête du C. Si quelqu'un peut m'aider...
 
J'ai besoin d'ouvrir un fichier dont je connais le nom, disons "fichier.txt". Je dois rechercher une chaîne de caractère "coucou" dans le fichier et supprimer la ligne du fichier.
 
Une adresse de site Internet ou bien un source : je suis preneur !

Reply

Marsh Posté le 12-01-2001 à 20:47:18   

Reply

Marsh Posté le 13-01-2001 à 18:39:37    

A sinon j'ai fait des essais de mon côté pour voir ce que je donne en prog, mais après une heure et demi de fonctions à la con (mais je vous laisse seuls juges...) je ne suis même pas foutu de compiler. J'attends vos commentaires là dessus.
 
 
 
#include <stdio.h>
 
void saisir(char *p)
{ printf("Entrez le nom du fichier à ouvrir : " );
 scanf("%s", p);
}
 
void afficher(char *p)
{
 printf("Le nom du fichier à ouvrir est : %s
", p);
}
 
void ouvrir(FILE *fp, char *p)
{
 if((fp=fopen(p, "r" ))==NULL)
ssprintf("ERREUR : impossible d'ouvrir %s
", p);
 fp=fopen(p, "a" );
}
 
void fermer(FILE *fp)
{
 fclose(fp);
}ss
 
void newline(void)
{
 printf("
" );
}
 
main()
{
 char nom_fichier[30];
 FILE *nom_interne;
 char *ptr_nom;
 
 saisir(nom_fichier);
 afficher(nom_fichier);
 
 newline();
 
 ptr_nom=nom_fichier;
 ouvrir(nom_interne, ptr_nom);
 fermer(nom_interne);
}
 
 
Mon problème vient des appels de fonctions et des pointeurs. Je me trompe tout le temps. Si quelqu'un peut m'expliquer tout ça, je serais super content.

Reply

Marsh Posté le 13-01-2001 à 18:56:33    

la partie Dragon Ball Z de ton site est misérable :D

Reply

Marsh Posté le 13-01-2001 à 19:07:38    

Merci bien, mais ce n'est pas de cela qu'il s'agit.

Reply

Marsh Posté le 13-01-2001 à 19:13:24    

Quand tu dis retirer la ligne, tu veux dire retirer la ligne qui contient la chaîne de caractère ou alors tu veux juste retirer la chaîne de caractère du fichier?

Reply

Marsh Posté le 13-01-2001 à 19:34:42    

T'as pas répondu ... alors voilà un source qui prend sur la ligne de commande le nom du fichier à traiter, ensuite il faut saisir la chaîne de caractère à bannir. Un fichier avec une extension 'tmp' est créé; il contient les lignes du fichier original ne contenant pas la chaîne saisie par toi.
voici :ss
 
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
 
 
void main(int argc,char *argv[]){
 
 
 FILE * fd,*df;
 char ligne[65535];
 char pb[4096];
 
 if (argc!=2){
ssfprintf(stderr,"%s %s %s","Il y a un problème, il y a ",(argc>2) ? "trop" : "pas assez"," d'argument sur la ligne de commande" );
ssexit(-1);
 }
 else{
ssstrcpy(ligne,argv[1]);
ssstrcat(ligne,".tmp" );
ssdf=fopen(ligne,"w" );
ssif (!df){
ss printf("%s","impossible d'ouvrir le fichier de sortie" );
ss exit(-3);
ss}
 }
 fd = fopen(argv[1],"r" );
 if (!fd){
ssfprintf(stderr,"Impossible d'ouvrir le fichier "%s"
",argv[1]);
ssexit(-2);
 }
 printf("Veuillez saisir la chaine à retirer ?" );
 scanf("%s",pb);
 while(fgets(ligne,sizeof(ligne),fd)){
ssif (strstr(ligne,pb));
sselse fprintf(df,"%s",ligne);
 }
 fclose(fd);
 fclose(df);
}
 
 
Je sais, je sais, ce n'est pas très propre tout ceci mais c'est pour l'exemple.
 
PS : si le fichier contient des lignes de plus de 65535 caractères, le bon fonctionnement n'est pas garanti.

Reply

Marsh Posté le 13-01-2001 à 20:16:32    

Escuse-moi si je n'ai pas répondu : j'étais en train de manger. Tu n'es pas un mauvais bougre finalement ! Merci de ton aide. Voilà sinon pour la question de tout à l'heure : c'est la ligne qui est à bannir. Mais c'est déjà un début. Merci beaucoup.
 
Note qu'à la rigueur, vu que le but de l'opération est de supprimer des lignes de code contenant un mot clé, je peux aussi bien mettre des commentaires du genre // en début de ligne.
 
Je suis preneur.

Reply

Marsh Posté le 14-01-2001 à 12:08:56    

Voilà, maintenant, je sais exactement ce que veux : dans un fichier texte, en tout début d'une ligne ou se trouve écrit le mot Jean-Pierre, je veux placer //, pour que la ligne soit traitée comme commentaire.

Reply

Marsh Posté le 14-01-2001 à 13:17:41    

zop a écrit a écrit :

la partie Dragon Ball Z de ton site est misérable :D

 





 
Tu as bien fait d'enlever l'adresse de ton site car c'était misérabless
 :Dss:Dss:Dss:Dss:Dss:D

 

Reply

Marsh Posté le 14-01-2001 à 13:26:12    

Lord II a écrit a écrit :

 
 
Tu as bien fait d'enlever l'adresse de ton site car c'était misérabless :Dss:Dss:Dss:Dss:Dss:D
 
 

 





 
balance :D :D :D

Reply

Marsh Posté le 14-01-2001 à 13:26:12   

Reply

Marsh Posté le 14-01-2001 à 14:20:36    

Je n'ai pas enlevé l'adresse de mon site. Vous pouvez donc toujours aller voir mon misérable site. Mais passons voulez-vous ?
 
Je cherche à masquer une ligne dans un fichier texte. pourrais-je avoir quelque chose de constructif de votre part, peut-être ?

Reply

Marsh Posté le 14-01-2001 à 14:33:08    

Cherrytree a écrit a écrit :

Je n'ai pas enlevé l'adresse de mon site. Vous pouvez donc toujours aller voir mon misérable site. Mais passons voulez-vous ?
 
Je cherche à masquer une ligne dans un fichier texte. pourrais-je avoir quelque chose de constructif de votre part, peut-être ?

 





 
Te fâche pas, man. Si tu relis avec plus d'attention les 2 posts précédant le tien , tu te rendras compte qu'il s'agit d'une blague de ce bon vieux Lord II concernant mon site perso (celui de "zop" ) et non pas du tien. D'ailleurs, toutes mes excuses pour mon premier post, je reconnais qu'il est totalement off-topic et stupide.
 :jap:ssje regrette ce que j'ai pu écriress:sweat: , sincèrementss
 
bon pour t'aider, à la place du bloc
 
/***********************************************************
 while(fgets(ligne,sizeof(ligne),fd)){
ssif (strstr(ligne,pb));
sselse fprintf(df,"%s",ligne);
}
***********************************************************/ss
tu pourrais écrire
 
/***********************************************************
 while(fgets(ligne,sizeof(ligne),fd)){
ssif (strstr(ligne,pb)) fprintf(df,"%s","// ";
ssfprintf(df,"%s",ligne);
}ss
************************************************************/
 
je n'ai pas testé mais je pense que çà devrait fonctionner
 
Salut et sans rancune

Reply

Marsh Posté le 14-01-2001 à 15:02:14    

il manque une parenthèse fermante, désolé

Reply

Marsh Posté le 14-01-2001 à 21:47:59    

Merci beaucoup à toi. J'ai cru que la remarque concernant ton site Internet m'étais destinée. Il y a maintenant 6 mois que je roule ma bosse sur le forum, et jamais personne ne m'avait sauté dessus comme cela.
 
Désolé donc aussi. Sache que j'apprécie beaucoup le geste.

Reply

Marsh Posté le 14-01-2001 à 23:35:14    

Je viens à l'instant de tester le programme, il est bien cool. Je te remercie de ton aide.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed