Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1788 connectés 

  FORUM HardWare.fr
  Programmation

  Les fichiers en C ANSI

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Les fichiers en C ANSI

n°9424
Cherrytree
cn=?
Posté le 12-01-2001 à 20:47:18  profilanswer
 

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 !

mood
Publicité
Posté le 12-01-2001 à 20:47:18  profilanswer
 

n°9481
Cherrytree
cn=?
Posté le 13-01-2001 à 18:39:37  profilanswer
 

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.

n°9482
zop
1 world, 1 web, 1 Windows
Posté le 13-01-2001 à 18:56:33  profilanswer
 

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

n°9483
Cherrytree
cn=?
Posté le 13-01-2001 à 19:07:38  profilanswer
 

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

n°9484
zop
1 world, 1 web, 1 Windows
Posté le 13-01-2001 à 19:13:24  profilanswer
 

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?

n°9485
zop
1 world, 1 web, 1 Windows
Posté le 13-01-2001 à 19:34:42  profilanswer
 

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.

n°9493
Cherrytree
cn=?
Posté le 13-01-2001 à 20:16:32  profilanswer
 

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.

n°9547
Cherrytree
cn=?
Posté le 14-01-2001 à 12:08:56  profilanswer
 

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.

n°9553
Lord II
PIB2000
Posté le 14-01-2001 à 13:17:41  profilanswer
 

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

 

n°9554
zop
1 world, 1 web, 1 Windows
Posté le 14-01-2001 à 13:26:12  profilanswer
 

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

mood
Publicité
Posté le 14-01-2001 à 13:26:12  profilanswer
 

n°9563
Cherrytree
cn=?
Posté le 14-01-2001 à 14:20:36  profilanswer
 

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 ?

n°9566
zop
1 world, 1 web, 1 Windows
Posté le 14-01-2001 à 14:33:08  profilanswer
 

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

n°9569
zop
1 world, 1 web, 1 Windows
Posté le 14-01-2001 à 15:02:14  profilanswer
 

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

n°9611
Cherrytree
cn=?
Posté le 14-01-2001 à 21:47:59  profilanswer
 

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.

n°9619
Cherrytree
cn=?
Posté le 14-01-2001 à 23:35:14  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  Les fichiers en C ANSI

 

Sujets relatifs
Plus de sujets relatifs à : Les fichiers en C ANSI


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)