Les fichiers en C ANSI - Programmation
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.
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?
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.
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.
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.
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 |
Tu as bien fait d'enlever l'adresse de ton site car c'était misérabless
Dss:Dss:Dss:Dss
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 |
balance
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 ?
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.
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
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.
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.
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 !