Supprimer une partie d'un fichier texte en langage c

Résolu/Fermé
jujuthithi64 - 26 janv. 2020 à 20:54
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 - 27 janv. 2020 à 21:48
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
A voir également:

1 réponse

yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
26 janv. 2020 à 21:01
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?
0
jujuthithi64
26 janv. 2020 à 21:22
Alors à la base je dois réaliser un petit logiciel de dessin, du genre tracer un cercle, une ligne.
Toute cette partie fonctionne et j'ai voulu ajouter la possibilité d'enregistrer les points de ces différentes formes dans un fichier texte.
Jusqu'ici ca fonctionne.
ensuite j'ai voulu faire en sorte de supprimer une de ces formes, donc d'effacer une partie de ce fichier.
pour cela j'avais dans l'idée de recopier le fichier texte en question et m'arreter à la forme en question, de lire les points de cette forme sans les enregistrer, puis de reprendre la lecture apres cette forme et d'enregistrer le reste.cela n'a jamais fonctionner correctement, et les valeur recopiée n'avaient aucun rapport avec celles des points enregistrés.
Lors de mon dernier essaie j'ai choisi d'enregistrer ces valeurs dans deux tableau à taille variable, genre dans mes fonction d'affichage j'ai fait en sorte de connaitre le nombre de point de ces forme, et de les enregistrer dans un tableau nformes; dans le premier je stock la première partie du fichier texte, dans le second la deuxième partie. Entre ces deux parties je li le fichier sans enregistrer..
Je suis assez débutant et je pense qu'il me manque une notion je tourne en rond
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476 > jujuthithi64
27 janv. 2020 à 08:32
as-tu remarqué que tu n'utilises pas la variable n_forme?
merci d'utiliser, comme demandé, les balises de code.
peux-tu ajouter des commentaires, ou expliquer ce que fait chaque instruction, et à quoi sert chaque variable?
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, supprimer la forme en mémoire, et écrire un enregistrer?
0
jujuuuuuuuuuu Messages postés 10 Date d'inscription dimanche 15 novembre 2015 Statut Membre Dernière intervention 27 janvier 2020 > yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024
27 janv. 2020 à 13:11
Bonjour,
je vous reposte mon code avec les balises:
 
#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;
}




et voici mon fichier texte:


Tu as raison je n'ai pas besoin de la variable n_formes ici. Je m'en sert dans le programme complet pour stocker le nombre de points des formes dans un tableau.
J'ai également tester d'autres méthode, notamment avec ftell pour enregistrer les position, mais les valeurs recopiée n'avaient aucun rapport.
Pour celui-ci il tourne sans cesse.

Merci,
Julien
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476 > jujuuuuuuuuuu Messages postés 10 Date d'inscription dimanche 15 novembre 2015 Statut Membre Dernière intervention 27 janvier 2020
Modifié le 27 janv. 2020 à 14:18
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.
0
jujuuuuuuuuuu Messages postés 10 Date d'inscription dimanche 15 novembre 2015 Statut Membre Dernière intervention 27 janvier 2020 > yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024
27 janv. 2020 à 18:04
Je viens de comprendre ce que tu me dis..
Je vais essayer comme cela
0