begin process at 2012 05 30 04:26:51
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Windows

 > 

Fichier & Disque

 > 

suppression d'une structure dans un fichier


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

suppression d'une structure dans un fichier

samedi 16 janvier 2010 à 19:18:32 | suppression d'une structure dans un fichier

ragon

bonjour,

je souhaite simplement supprimer toute une structure d'un fichier, mais je n'y arrive pas.
Voila mon code, j'ai essayé un truc mais ca fonctionne pas super bien

Code C/C++ :
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define FFL fflush(stdin)


struct ordinateur
{
    char type_proc[20];
    char vitesse_proc[20];
    char ram[20];
    char HD[20];
    char annee[20];
};

struct carnet
{
    struct ordinateur nbpc[50];
    int compteur;
};


void saisie(FILE*fichier,/*FILE*fichieran,*/struct ordinateur *pc);
void saisieannee(FILE*fichier,/* FILE*fichieran, */struct ordinateur *pc);
void affichage(FILE*fichier);
void suppression(FILE*fichier, struct ordinateur *pc);


int main(void)
{
    FILE*fichier=NULL;
    fichier=fopen("ordinateur.lst","a");
    struct ordinateur pc;
    int option;
    do
    {
        printf("\tMenu");
        printf("1: Saisie des caracteristiques d'un ordinateur.\n2: Tri des ordinateurs en fonction des annees.\n3: Affichage d'un des fichiers.\n4: Supprimer un ordinateur d'une liste.");
        scanf("%d",&option);
        switch (option)
        {
        case 1:
            saisie(fichier/*,fichieran*/,&pc);
            break;

        case 2:
            saisieannee(fichier/*,fichieran*/,&pc);
            break;

        case 3:
            affichage(fichier);
            break;

        case 4:
            suppression(fichier,&pc);
            break;
        }

    }
    while (1);
    return 0;

}
void saisie(FILE*fichier/*,FILE*fichieran*/, struct ordinateur *pc)
{

    if (fichier==NULL)
        puts("probleme a l'ouverture du fichier");
    else
    {
        fichier=fopen("ordinateur.lst","a");
        FFL;
        puts("quelle est l'annee d'achat");
        FFL;
        gets((*pc).annee);
        fprintf(fichier, "annee d'achat: %s\n", (*pc).annee);
        FFL;
        puts("quelle est le type du processeur");
        FFL;
        gets((*pc).type_proc);
        fprintf(fichier, "type processeur: %s\n", (*pc).type_proc);
        puts("quelle est la vitesse du processeur");
        FFL;
        gets((*pc).vitesse_proc);
        fprintf(fichier, "vitesse proc: %s\n", (*pc).vitesse_proc);
        FFL;
        puts("quelle est la taille de la memoire vive");
        FFL;
        gets((*pc).ram);
        fprintf(fichier, "taille ram: %s\n", (*pc).ram);
        FFL;
        puts("quelle est la taille du disque dur");
        FFL;
        gets((*pc).HD);
        fprintf(fichier, "taille du disque dur: %s\n", (*pc).HD);

        fclose(fichier);


    }
}

void saisieannee(FILE*fichier/*,FILE*fichieran*/,struct ordinateur *pc)
{
    char chaine[5000] = "";
    fichier=fopen("ordinateur.lst","r");
    if (fichier != NULL)
    {
        while (fgets(chaine, 5000, fichier) != NULL)
        {
            printf("%s", chaine);
        }
        fclose(fichier);
    }

    char year[5];
    char date[20];
    FFL;
    puts("entrez la date");
    gets(date);
    char ordi[20]="ordi";
    char nfichier[20];
    char lst[6]=".lst";
    strcpy(nfichier,ordi);
    strcat(nfichier,date);
    strcat(nfichier,lst);
    printf("le nom du fichier est: %s\n",nfichier);

    if (strcmp(date,(*pc).annee)==0)
    {
        fichier=fopen(nfichier,"a");

        fprintf(fichier, "annee d'achat: %s\n", (*pc).annee);
        fprintf(fichier, "type processeur: %s\n", (*pc).type_proc);
        fprintf(fichier, "vitesse proc: %s\n", (*pc).vitesse_proc);
        fprintf(fichier, "taille ram: %s\n", (*pc).ram);
        fprintf(fichier, "taille du disque dur: %s\n", (*pc).HD);

        fclose(fichier);
    }
}




void affichage(FILE*fichier)
{
    char name[20];
    int caractuel = 0;
    puts("quel fichier voulez vous ouvrir(tapez le nom exact)");
    FFL;
    gets(name);
    fichier = fopen(name,"r");

    if (fichier != NULL)
    {

        do
        {
            caractuel = fgetc(fichier);
            printf("%c", caractuel);
        }
        while (caractuel != EOF);
        fclose(fichier);

    }

}


void suppression(FILE*fichier,struct ordinateur *pc)
{
    int caractereActuel = 0;
    char chaine[2000];

    char year[20];
    FILE*fichier2;
    fichier = fopen("ordinateur.lst", "r");
    /* puts("quelle est l'annee d'achat de l'ordinateur a supprimer?");
     FFL;
     gets(year);
     printf("l'annee d'achat du pc a supprimer est: %s",year);
    */
    fichier2=fopen("tempo.lst","w");
    char ligne[256];
    int i=0;

    rewind(fichier);
    while (fread(&(*pc),sizeof(struct ordinateur),1,fichier) && !feof(fichier))
    {
        if (strcmp((*pc).annee,"1999")==0)
        {
            fseek(fichier,sizeof(struct ordinateur),SEEK_CUR);

        }
        fwrite(&(*pc),sizeof(struct ordinateur),1,fichier2);
    }
    fclose(fichier);
    fclose(fichier2);



    /*fgets(ligne, sizeof ligne, fichier);

        printf("%s\n",ligne);
        if (strcmp(year,(*pc).annee)==0)
        {
            fputs(ligne, fichier2);

        }   */

    /* while (fgets(ligne, sizeof ligne, fichier))
    {
    if (ligne[15] != '\n')
    {
    //  ligne[0]=" ";

     fputs(ligne, fichier2);
    }   }











    /*
    char chaine[20000] = "";
    char year[5];
    fgets(chaine, TAILLE_MAX, fichier);
    printf("%s", chaine);
    fseek(f, 0L, SEEK_SET);
    for(i = 0; i < year; i++)
    getc(f);
    */
}
dimanche 17 janvier 2010 à 19:29:08 | Re : suppression d'une structure dans un fichier

rt15

Membre Club Administrateur CodeS-SourceS
Salut,

Je n'ai pas lu ton code, mais on ne peut pas vraiment supprimer dans un fichier (Avec du code standard).
Il faut par exemple lire le fichier, le fermer, puis l'ouvrir en w+ et tout réécrire dedans, puis le refermer. Ou, plus sûr, utiliser un fichier intermédiaire : Tu lis le fichier, tu écris dans un autre fichier. Quand tu as fini d'écrire, tu supprime le premier fichier et renomme le second du même nom que le premier.
dimanche 17 janvier 2010 à 19:37:37 | Re : suppression d'une structure dans un fichier

rt15

Membre Club Administrateur CodeS-SourceS
Ah heu c'est ce que tu as essayé de faire on dirait.
Ca à l'air pas trop mal, mais pourquoi faire le fseek ? fread revient à faire un fseek. Donc là, tu supprime l'enregistrement suivant celui que tu veux supprimer.

D'autre part :
"&(*pc)" est équivalent à "pc".
Et "(*pc)." est souvent écrit "pc->".

Plutôt quelque chose comme ça :
Code C/C++ :
    while (!feof(fichier) && fread(pc,sizeof(struct ordinateur),1,fichier))
    {
        if (strcmp(pc->annee,"1999"))
        {
            fwrite(pc,sizeof(struct ordinateur),1,fichier2);
        }
    }


mardi 19 janvier 2010 à 20:53:54 | Re : suppression d'une structure dans un fichier

ragon

Bonsoir,

en fait j'ai longuement cherché, et je n'ai reussi qu'a faire ca:
Code C/C++ :
void suppression(struct ordinateur *pc)
{
    FILE*fichier=NULL;
    int caractereActuel = 0;
    char chaine[2000];

    char year[20];
    FILE*fichier2=NULL;
    fichier = fopen("ordinateur.lst", "r");
    fichier2=fopen("tempo.lst","w");
    printf("\n\n");
    rewind(fichier);
    char chaine2[200];
    char chaine3[200];
    char chaine4[200];
    char chaine5[200];

    int i=15;


    fgets(chaine, 2000, fichier);
    int ouinon =0;
    char chaine7[200];
    int sortie=0;
    printf("%s",chaine);
    do
    {
        {
            fgets(chaine2, 2000, fichier);
            printf("%s",chaine2);
            fgets(chaine3, 2000, fichier);
            printf("%s",chaine3);
            fgets(chaine4, 2000, fichier);
            printf("%s",chaine4);
            fgets(chaine5, 2000, fichier);
            printf("%s",chaine5);
            puts("est ce la machine que vous souhaitez supprimer ?1 pour oui, 0 pour non");
            scanf("%d",&ouinon);
            while (ouinon==0)
            {
                if (ouinon==0)
                {
                    fputs(chaine,fichier2);
                    fputs(chaine2,fichier2);
                    fputs(chaine3,fichier2);
                    fputs(chaine4,fichier2);
                    fputs(chaine5,fichier2);
                    fputs(chaine7,fichier2);

                    fgets(chaine2, 2000, fichier);
                    printf("%s",chaine2);
                    fgets(chaine3, 2000, fichier);
                    printf("%s",chaine3);
                    fgets(chaine4, 2000, fichier);
                    printf("%s",chaine4);
                    fgets(chaine5, 2000, fichier);
                    printf("%s",chaine5);
                    fgets(chaine7, 2000, fichier);
                    printf("%s",chaine7);
                    puts("est ce la machine que vous souhaitez supprimer ?1 pour oui, 0 pour non");
                    scanf("%d",&ouinon);

            }    }
        }
        puts("sortir ?1oui 0non");
        scanf("%d",&sortie);

    }
    while (sortie==0);

    printf("\n\n");
    char chaine6[2000];
    while (fgets(chaine6, 2000, fichier) != NULL)
    {
        printf("%s", chaine6);
        fputs(chaine6,fichier2);
    }

    fclose(fichier);
    fclose(fichier2);
}



Je vais essayer ce soir avec ta méthode parce que la mienne est une vraie usine a gaz. Cela dit elle fonctionne quand meme...

En revanche j'ai un problème pour la fonction saisieannee. Je souhaite qu'elle trie toutes les structures du fichier "ordinateur.lst", mais je vois pas trop comment faire non plus, parce qu'actuellement je ne range que la toute derniere structure rentrée.


Cette discussion est classée dans : fichier, pc, file, ordinateur, char


Répondre à ce message

Sujets en rapport avec ce message

Erreurs de compilations bizarres avec Visual C++ 6 [ par VTS_35 ] Bonjour,G encore des problèmes de compilation avec mon programme. Je me suis rendu compte que le programme allait devenir balaise, alors j'ai décidé d Problème copie de fichier.... [ par Clonk ] Bonjour,Je voudrais copier un fichier texte dans mon appli, j'ai fais la fonction suivante://Copie d'un fichier (création du backup)int copier(char * modifier un mot dans un fichier [ par krusty24 ] bonjour tout le mondele but de mon programme est de modifier un mot dans un fichier.exemple de fichier:2,3  4,5 6.7  8,91.3 2,4  5.7 6,8par exemple je cherchet afficher un ou plusieurs ligne d'une fichier texte . [ par brell ] bon jour! cette fonction a comme parametre fichier contenant les messages et une chaine de caracteres contenant le destinateur. cette fonction permet enregister un fichier depuis les ressources [ par baby3378 ] Bonjour à tous, Voilà, afin de faciliter l'utilisation d'une application j'ai décidé de stocker les images et dll en ressource dans mon application af Conversion d'un char[] en char*puis stocké en char*[] [ par Saigonoseme ] Bonjour à tous, J'ai un petit souci de conversion d'une chaîne de caractère dans un tableau de chaînes de caractère !!!(tAgTabTrame). (C'est pas agré fnsplit et fnmerge [ par samissam ] Bonjour, j'ai un code d'une fonction que je veux l'exploiter en Dev C++ mais ce dernier me renvoi des erreur sur les fnsplit et fnmerg, code: vo recherche fichier séquentiel [ par peter2010 ] Bonjour, j'ai un fichier séquentiel contenant des informations séparées par des ; qui contient l'inventaire d'une épicerie,en paramètre j'ai le nom du Programme Moyenne [ par kable78 ] Bonjour, Je cherche à faire un programme qui permet le calcul d'une moyenne à partir d'un fichier. Dans ce fichier doit figurer le nom de l'élève sui Acquisition d'images sur pc faites par CMUcam3 via liaison RS232 [ par nab26 ] Bonjour à tous. Je travaille actuellement sur un projet nécessitant la programmation d'un capteur vidéo relié à mon pc par une liaison série RS232 :


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,889 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales