Supprimer une partie d'un fichier texte en langage c [Résolu]

Signaler
-
Messages postés
13334
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
27 novembre 2020
-
Bonsoir,

je vous poste mon code car je ne trouve pas de solution pour effacer une partie d'un fichier texte.
J'ai testé celui ci et ne comprend pas pourquoi il ne fonctionne pas.
J’espère que vous pourrez m'aider.
Merci.
Julien


int main()
{
printf("Hello world!\n");
FILE* draw=fopen("dessin_forme.txt", "r");
FILE* drawbis= fopen("dessin_formebis.txt","w+");

int n_forme=3;
int n_points_forme1 = 64;
int n_points_forme2=64;
int n_points_forme3 = 64;
int taille = sizeof(int);

int* tab1= calloc(n_points_forme1,taille);
int* tab2= calloc(n_points_forme2,taille);
int carx, cary;
int i=0;
int u=0;
for (i=0; i<= n_points_forme1/2-1;i++)
{

fscanf(draw,"%d %d", &carx,&cary);
tab1[i]=carx;
tab2[i]= cary;
}
int h=0;
for(h=0;h<=n_points_forme1; h++)
{
fprintf(drawbis,"%d ",tab1[h]);
fprintf(drawbis,"%d\n",tab2[h]);
}

int n=0;
for(n=0; n<=n_points_forme2/2;n++)
{
int g;
fscanf(draw,"%d %d",&g,&g);
}
u=i;

for (u=i; u<= i+n_points_forme1/2-1;u++)
{
int carx, cary;
fscanf(draw,"%d %d", &carx,&cary);
tab1[u]=carx;
tab2[u]= cary;
}
int d;;
for(d=u;d<=u+n_points_forme3; h++)
{
fprintf(drawbis,"%d ",tab1[d]);
fprintf(drawbis,"%d\n",tab2[d]);
}
fclose(draw);
fclose(drawbis);


return 0;
}


Configuration: Windows / Opera Next 65.0.3467.78

1 réponse

Messages postés
13334
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
27 novembre 2020
748
bonjour,
avant tout, merci d'utiliser les balises de code quand tu partages du code: https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
ensuite, tu écris ''il ne fonctionne pas": peux-tu prendre un peu de temps pour nous expliquer ce qui se passe?
Messages postés
13334
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
27 novembre 2020
748 >
Messages postés
10
Date d'inscription
dimanche 15 novembre 2015
Statut
Membre
Dernière intervention
27 janvier 2020

merci de bien choisir le langage quand tu utilises les balises de code, ainsi:
#include <stdio.h>
#include <stdlib.h>

int main()
{
printf("Hello world!\n");
FILE* draw=fopen("dessin_forme.txt", "r"); /* fichier texte ou sont enregistrés les points*/
FILE* drawbis= fopen("dessin_formebis.txt","w+"); /* fichier texte vide où je veux récrire une partie du précédent*/

int n_forme=3;
int n_points_forme1 = 64; /*le nombre de point de chaques formes*/
int n_points_forme2=64;
int n_points_forme3 = 64;
int taille = sizeof(int);

int* tab1= calloc(n_points_forme1,taille); /*un tableau pour stocker les points x de la 1ère et 3ème forme*/
int* tab2= calloc(n_points_forme2,taille); /*un tableau pour stocker les points y*/
int carx, cary; /* mes deux variables qui vont récupérer x et y dans le .txt*/
int i=0;
int u=0;
for (i=0; i<= n_points_forme1/2-1;i++)
{

fscanf(draw,"%d %d", &carx,&cary);
tab1[i]=carx;
tab2[i]= cary;
}
int h=0;
for(h=0;h<=n_points_forme1; h++)
{
fprintf(drawbis,"%d ",tab1[h]);
fprintf(drawbis,"%d\n",tab2[h]);
}

int n=0;
for(n=0; n<=n_points_forme2/2;n++)
{
int g;
fscanf(draw,"%d %d",&g,&g);
}
u=i;

for (u=i; u<= i+n_points_forme1/2-1;u++)
{
int carx, cary;
fscanf(draw,"%d %d", &carx,&cary);
tab1[u]=carx;
tab2[u]= cary;
}
int d;;
for(d=u;d<=u+n_points_forme3; h++)
{
fprintf(drawbis,"%d ",tab1[d]);
fprintf(drawbis,"%d\n",tab2[d]);
}
fclose(draw);
fclose(drawbis);


return 0;
}

comme tu as du code qui enregistre les formes dans un fichier, et, je suppose, du code qui relit le fichier pour recréer les formes en mémoire, n'est-il pas plus simple de lire le fichier, de supprimer la forme en mémoire, et d'enregistrer dans un nouveau fichier?
je suis étonné que ta boucle en ligne 29 et ta boucle en ligne 1 n'ont pas le même nombre d'itérations. par ailleurs, pourquoi faire cela en deux boucles?
il y a des erreurs plus graves plus loin dans le programme, tu verras cela ensuite.
Messages postés
10
Date d'inscription
dimanche 15 novembre 2015
Statut
Membre
Dernière intervention
27 janvier 2020
>
Messages postés
13334
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
27 novembre 2020

J'ai vu que j'incrémentais h au lieux de u..
pour le nombre d'itération différent entre les deux for tu as raison également. En fait j'avais commencer par ne lire qu'un seul caractère.
J'ai fait deux boucles car je n'étais pas sur que la lecture et l'écriture pouvaient se passer au même moment.
Messages postés
10
Date d'inscription
dimanche 15 novembre 2015
Statut
Membre
Dernière intervention
27 janvier 2020
>
Messages postés
13334
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
27 novembre 2020

Je viens de comprendre ce que tu me dis..
Je vais essayer comme cela
Messages postés
10
Date d'inscription
dimanche 15 novembre 2015
Statut
Membre
Dernière intervention
27 janvier 2020
>
Messages postés
10
Date d'inscription
dimanche 15 novembre 2015
Statut
Membre
Dernière intervention
27 janvier 2020

Mon programme fonctionne cette fois ci.
J'avais belle et bien besoin de la variable n_forme pour la taille de mes tableaux!
J'ai également fusionner la lecture et écriture dans une seule boucle et cela marche.
Merci beaucoup.
Messages postés
13334
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
27 novembre 2020
748 >
Messages postés
10
Date d'inscription
dimanche 15 novembre 2015
Statut
Membre
Dernière intervention
27 janvier 2020

eh bien, tu as bien progressé!
si tu veux partager le programme final, il y avait encore des erreurs dans l'utilisation de tab1 & de tab2.