Supprimer une ligne (enregistrement) dans fichier

cs_FOSTA Messages postés 7 Date d'inscription mercredi 15 novembre 2000 Statut Membre Dernière intervention 27 novembre 2007 - 13 mai 2005 à 11:40
cs_FOSTA Messages postés 7 Date d'inscription mercredi 15 novembre 2000 Statut Membre Dernière intervention 27 novembre 2007 - 13 mai 2005 à 11:56
Bonjour,
j'ai un problème de suppression d'une ligne dans un fichier existant déjà(nous le créons plus).
j'ai essayé d'écrire les fonctions ci-dessous pour faire cette suppression mais ça ne marche pas.
Alors que faire?

void positionneCurs(FILE *f,long numl)
{
char c;
long cpterl=0;


fseek(f,0,SEEK_SET);
while((numl!=cpterl))
{ c=fgetc(f);
if(c=='\n')
cpterl++;
}
}

/* Cette fonction permet de supprimer une ligne(enregistrement) dans un fichier */
void supprimerEnreg(int numecrit)
{ FILE *f;
int i=0,pos;

f=fopen(nomfichier,"r+");
positionneCurs(f,numecrit);
fprintf(f," ");
fclose(f);
}

2 réponses

cs_FOSTA Messages postés 7 Date d'inscription mercredi 15 novembre 2000 Statut Membre Dernière intervention 27 novembre 2007
13 mai 2005 à 11:49
Bonjour,
je souhaite recupérer une champ et le comparé à une chaine saisie au clavier, pour cela j'ai écrit les fonctions ci-dessous mais elles ne marchent pas comme je souhaite.
Aidez-moi.
Merci déjà.

void positionneCurs(FILE *f,long numl)
{
char c;
long cpterl=0;


fseek(f,0,SEEK_SET);
while((numl!=cpterl))
{ c=fgetc(f);
if(c=='\n')
cpterl++;
}
}


char *lireligne(long numl)
{ FILE *f;
char cdc[256];
int nbc;


nbc=nbcaract();
f=fopen( nomfichier,"r+");
positionneCurs(f,numl);
fgets(cdc,nbc,f);
fclose(f);
return((char*) &cdc);
}
char *lirechamp(long posl,int posc)
{ char champ[25],tab[256];
int i=0,virg=0,j=0;


strcpy(tab,lireligne(posl));
while(virg<(posc-1))
{
if(tab[i]==';')
{
virg=virg+1;
}
i++;
}
while(tab[i]!= ';')
{ champ[j]=tab[i];
j++;i++;
}
return((char*) &champ);
}


/* Renvoie un r‚el recup‚r‚ dans le fichier */
float donneReel(char *pR)
{ char *pC;
strcpy(pC,pR);
return(atof(pC));
}
/* Renvoie un entier recup‚r‚ dans le fichier */
int donneEntier(char *pR)
{ char *pC;
strcpy(pC,pR);
return(atoi(pC));
}



void balanceG(char cptentre[12])
{
FILE *fic;
long int i=0,k;
float solde,montantc=0,montantd=0,montantt=0;//,Tmontantc[20],Tmontantd[20];
int d=0,c=0,j,existe=0;
char lecomp[8],lecpte[8];


k=cpterligne();
//fseek(fic,0,SEEK_SET);
fic=fopen(nomfichier,"r+");
while(k!=i)
{ strcpy(lecpte,lirechamp(i,4));
/*for(j=0;j<8;j++)
lecpte[j]=*(lirechamp(i,4)+j);*/
printf("Nø compte: %s\n",lecpte);
if((strcmpi(lecpte,cptentre))==0){//si compte saisi=compte fichier
existe=1;
if(donneEntier(lirechamp(i,5))==-1){//si le sens=-1 (Cr‚dit)
montantc=(montantc+donneReel(lirechamp(i,8)));//affectation du montant
//Tmontantc[c]=atol(lirechamp(fic,i,8));
c++;
}
if(donneEntier(lirechamp(i,5))==1){//si le sens=-1 (D‚bit)
montantd=(montantd+donneReel(lirechamp(i,8)));
//Tmontantd[d]=atol(lirechamp(fic,i,8));
d++;
}
}
i++;
}
solde=montantd-montantc;
if(existe==1){
clrscr();
gotoxy(25,5);
printf("B A L A N C E G E N E R A L E");
gotoxy(2,10);
printf("Compte");
gotoxy(2,14);
printf("%s",cptentre);
gotoxy(15,10);
printf("D‚bit");
gotoxy(15,14);
printf("%.0f",montantd*100);
gotoxy(34,10);
printf("Cr‚dit");
gotoxy(34,14);
printf("%.0f",montantc*100);
gotoxy(56,10);
printf("Solde");
gotoxy(56,14);
if(solde<0)
printf("%.0f",-solde*100);
else
printf("%.0f",solde*100);
gotoxy(70,14);
if(solde<0)
printf("(Cr‚diteur)");
if(solde>0)
printf("(D‚biteur)");
if(solde==0)
printf("(Nulle)");
}
else
printf("Ce compte n'existe pas.");
fclose(fic);
}
/* Cette fonction permet de compter le nombre lignes(enregistrements) dans
un fichier */
int cpterligne()
{
FILE *f;
int cpterl=0;
char c;
f=fopen(nomfichier,"r");
//fseek(f,0,SEEK_SET);
while((c=fgetc(f))!=EOF)
{
if(c=='\n')
cpterl++;
}
fclose(f);
return cpterl;
}
0
cs_FOSTA Messages postés 7 Date d'inscription mercredi 15 novembre 2000 Statut Membre Dernière intervention 27 novembre 2007
13 mai 2005 à 11:56
Bonjour,
je souhaite recupérer une champ et le comparé à une chaine saisie au clavier, pour cela j'ai écrit les fonctions ci-dessous mais elles ne marchent pas comme je souhaite.
Aidez-moi.
Merci déjà.

void positionneCurs(FILE *f,long numl)
{
char c;
long cpterl=0;


fseek(f,0,SEEK_SET);
while((numl!=cpterl))
{ c=fgetc(f);
if(c=='\n')
cpterl++;
}
}


char *lireligne(long numl)
{ FILE *f;
char cdc[256];
int nbc;


nbc=nbcaract();
f=fopen( nomfichier,"r+");
positionneCurs(f,numl);
fgets(cdc,nbc,f);
fclose(f);
return((char*) &cdc);
}
char *lirechamp(long posl,int posc)
{ char champ[25],tab[256];
int i=0,virg=0,j=0;


strcpy(tab,lireligne(posl));
while(virg<(posc-1))
{
if(tab[i]==';')
{
virg=virg+1;
}
i++;
}
while(tab[i]!= ';')
{ champ[j]=tab[i];
j++;i++;
}
return((char*) &champ);
}


/* Renvoie un r‚el recup‚r‚ dans le fichier */
float donneReel(char *pR)
{ char *pC;
strcpy(pC,pR);
return(atof(pC));
}
/* Renvoie un entier recup‚r‚ dans le fichier */
int donneEntier(char *pR)
{ char *pC;
strcpy(pC,pR);
return(atoi(pC));
}



void balanceG(char cptentre[12])
{
FILE *fic;
long int i=0,k;
float solde,montantc=0,montantd=0,montantt=0;//,Tmontantc[20],Tmontantd[20];
int d=0,c=0,j,existe=0;
char lecomp[8],lecpte[8];


k=cpterligne();
//fseek(fic,0,SEEK_SET);
fic=fopen(nomfichier,"r+");
while(k!=i)
{ strcpy(lecpte,lirechamp(i,4));
/*for(j=0;j<8;j++)
lecpte[j]=*(lirechamp(i,4)+j);*/
printf("Nø compte: %s\n",lecpte);
if((strcmpi(lecpte,cptentre))==0){//si compte saisi=compte fichier
existe=1;
if(donneEntier(lirechamp(i,5))==-1){//si le sens=-1 (Cr‚dit)
montantc=(montantc+donneReel(lirechamp(i,8)));//affectation du montant
//Tmontantc[c]=atol(lirechamp(fic,i,8));
c++;
}
if(donneEntier(lirechamp(i,5))==1){//si le sens=-1 (D‚bit)
montantd=(montantd+donneReel(lirechamp(i,8)));
//Tmontantd[d]=atol(lirechamp(fic,i,8));
d++;
}
}
i++;
}
solde=montantd-montantc;
if(existe==1){
clrscr();
gotoxy(25,5);
printf("B A L A N C E G E N E R A L E");
gotoxy(2,10);
printf("Compte");
gotoxy(2,14);
printf("%s",cptentre);
gotoxy(15,10);
printf("D‚bit");
gotoxy(15,14);
printf("%.0f",montantd*100);
gotoxy(34,10);
printf("Cr‚dit");
gotoxy(34,14);
printf("%.0f",montantc*100);
gotoxy(56,10);
printf("Solde");
gotoxy(56,14);
if(solde<0)
printf("%.0f",-solde*100);
else
printf("%.0f",solde*100);
gotoxy(70,14);
if(solde<0)
printf("(Cr‚diteur)");
if(solde>0)
printf("(D‚biteur)");
if(solde==0)
printf("(Nulle)");
}
else
printf("Ce compte n'existe pas.");
fclose(fic);
}
/* Cette fonction permet de compter le nombre lignes(enregistrements) dans
un fichier */
int cpterligne()
{
FILE *f;
int cpterl=0;
char c;
f=fopen(nomfichier,"r");
//fseek(f,0,SEEK_SET);
while((c=fgetc(f))!=EOF)
{
if(c=='\n')
cpterl++;
}
fclose(f);
return cpterl;
}
0
Rejoignez-nous