IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

probleme avec les fichiers en c


Sujet :

C

  1. #1
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2011
    Messages : 54
    Par défaut probleme avec les fichiers en c
    Bonjour,
    svp le probleme que j'ai est une liste d'adherents chacun possedant a son tour une liste d'activite j'ai reussi a creer et sauvegarder chaque adherent dans un fichier (ce qui differencie un adherent d'un autre est un code unique) le probleme c'est que je veux editer la liste d'activites et que j'y arrive pas par exemple un adherent:

    code:452
    nom :jean
    prenom :philippe
    .
    .
    listes d'activites:foot--basket

    je veux par exemple supprimer basket seulement pour cette adherent (plusieurs adherent peuvent avoir la meme activite) .
    ou encore ajouter une nouvelle activite comme tennis (l'acces a l'activite se faisant par l'intermediaire d'une fonction de parametres le code d'adherent et le nom de l'activite)
    le probleme est que je suis debutant en langage c est de la a creer une fonction qui travaille directement sur des fichiers me pose enormement de problems plus concretement comment effectuer des operations sur un fichier car j'ai effectuer les fonctions qui travaille sur ces listes le probleme c'est que une fois la console fermee les variables disparaissent alors j'aimerai bien une fonction qui charge ces variable sur console depuis le fichier pour y appliquer mes fonctions si possible
    ca fait une semaine que je tente plusieurs trucs sans succes. car sur le net je trouve l'ecriture et la lecture mais on ne parle pas de modification de fichiers.


    merci de bien vouloir m'eclairer

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 860
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par ibuto Voir le message
    le probleme est que je ne connait rien aux fichiers en langage c
    Oui, ça ne doit pas être évident.

    Citation Envoyé par ibuto Voir le message
    est de la a creer une fonction qui travaille directement sur des fichiers me pose enormement de problems j'ai realiser des fonctions qui travaillent directement sur ces listes en entrant comme parametres le code et l'activite seulement ces fonctions doivent normalement fonctionner a tout moment mais lorsque la console se ferme les variables qui caracterisent un adherent une lise d'activite ne sont pas memoriser donc forcement il y'a une erreur lors de l'execution alors ce que je demande c'est est ce qu'il y a une fonction qui permet de charger le fichier sur la console de tel sorte que les variables restent les memes pour pouvoir y travailler ou bien je doit creer de nouvelles fonctions qui agissent directement sur le fichier lui meme( mais je ne sais pas encore manipuler les fichiers malheuresement)
    ca fait des jours que je cherche sur le net mais a vrai dire je ne trouve que la lecture et l'ecriture sur fichier pas comment modifier
    A la base, un fichier c'est une suite d'octets. Par exemple tu peux avoir un fichier qui contient "bonjour\nil fait beau\n".
    Cette suite d'octets possède un caractère spécifique: le "\n" qui indique la fin d'une ligne. C'est grâce à ce "\n" que ton éditeur t'affichera bien proprement
    Bonjour
    Il fait beau
    Toutefois, le C est très bas niveau. Tout ce qu'il t'autorise à faire dans un fichier c'est
    - le lire. Tu peux lire au choix un caractère, un ensemble de n caractères ou une ligne. Dans ce dernier cas, la fonction de lecture s'arrête au premier "\n".
    - y écrire. Pareil, tu peux écrire un caractère ou n caractères.
    - te déplacer
    Et encore, la lecture et l'écriture ne sont possibles que si tu as ouvert le fichier avec l'indication "pour lire (éventuellement y écrire aussi)" et/ou "pour écrire (éventuellement pour lire aussi)". La différence entre "lire et écrire" et "écrire et lire" c'est que dans le cas "écrire et lire", le fichier est alors vidé à l'ouverture.

    Donc tu n'as que ces possibilités. A partir de là, tu n'as que 2 choix
    1) tu commences par tout charger tes infos en mémoire. En mémoire tu peux faire ce que tu veux: ajouter, modifier, supprimer des éléments. Puis, quand tu as fini, tu réécris tout dans le fichier
    2) en travaillant sur des enregistrements de taille fixe, modifier le nième enregistrement revient à se déplacer à l'endroit où il commence puis écrire à cet endroit de nouveaux octets qui viendront remplacer ceux qui y sont. Tu peux donc utiliser cette option bien plus difficile à mettre en oeuvre.

    Voilà. A toi de voir. Mais tu devrais quand-même faire qq exos sur les fichiers pour mieux maitriser cette notion...

    Citation Envoyé par ibuto Voir le message
    par exemple un adherent:

    code:452
    nom :jean
    prenom : clude
    .
    .
    listes d'activites:foot--basket
    Rien ne t'oblige à avoir un fichier aussi "humanisé". L'ordi il s'en balance de voir "code:" puis "nom:". Tu peux très bien par exemple avoir
    452:jean:claude:foot--basket
    Dans ce cas, tu te cales sur le "\n" pour avoir une info complète et sur le ":" pour séparer le contenu de chaque info (sous-entendu que le ":" ne sera pas présent par accident dans les datas).

    Ou bien tu peux avoir
    452.................jean................claude.............foot-basket.....
    Dans ce cas, chaque enregistrement est un bloc de 80 octets qui se divisent eux-mêmes en blocs de 20 octets par info.
    Ou plein d'autres possibilités. Bref à toi de voir ce qu'il y a de mieux mais il faut bien que tu penses à ce qu'il y a de mieux pour pouvoir ensuite être facilement traité dans un code et non pour ouvrir dans un bloc note...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2011
    Messages : 54
    Par défaut
    tout d'abord merci de ta reponse Sve@r et j'aimerai que tu me montre comment proceder pour cette suggestion :



    ""1) tu commences par tout charger tes infos en mémoire. En mémoire tu peux faire ce que tu veux: ajouter, modifier, supprimer des éléments. Puis, quand tu as fini, tu réécris tout dans le fichier""


    car le fait de recopier tout ca dans un nouveau fichier ne devrai pas me poser probleme c'est precisement sur comment charger les donnes en memoire
    que je ne sait pas comment faire(ca devrait logiquement etre la solution puisque j'ai deja les fonctions pour travailler sur les ancienes donnes a partir de la memoire)

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 860
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par ibuto Voir le message
    que je ne sait pas comment faire(ca devrait logiquement etre la solution puisque j'ai deja les fonctions pour travailler sur les ancienes donnes a partir de la memoire)
    C'est là que commence la subtilité. Tu as déjà ton programme de données qui est fait donc à un moment donné, ton programme charge les données en mémoire. Il crée la liste, les éléments, etc.
    Soit là tu as fait montre d'intuition en pensant à l'avenir et tu as alors pensé à bien découper ton programme en tâches élémentaires (comme créer un élément, puis saisir un élément, puis stocker l'élément saisi), soit tu as tout écrit dans le main() ton code intégral et impossible ensuite à faire évoluer.

    Si tu as bien découpé tes actions en taches élémentaires, comme par exemple
    - saisir une data
    - insérer la data dans la liste
    Alors te suffit de rajouter une tache "lire la data du fichier". En effet, que la data soit saisie au clavier ou lue depuis le fichier ne change pas sa nature et permet, dans les deux cas, de l'insérer dans la liste. Est-ce que tu vois le principe ???
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2011
    Messages : 54
    Par défaut
    en fait pour le main je l'ai reserve a des case en utilisant le switch. donc si j'ai bien comprit la demarche chaque variable doit etre stocke dans un fichier independant du fichier principal et pour travailler dessus il faut les ressortir c'est bien ca? la encore je veux te demander j'ouvre le 2eme fichier je lit la variable j'applique ma fonction et je ferme c'est ca?

  6. #6
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Au début tu as entré les données de chaque adhérent au clavier, puis tu as créé une structure pour les stocker puis tu as rangé la structure dans une collection pour les rassembler toutes. Peut être en as-tu modifié ou détruit certaines. Quand la collection de structures a été satisfaisante, tu as créé le fichier en y copiant les données stockées dans la collection.

    Ce qu'il faut faire c'est la même chose. La seule différence est que les données ne sont plus entrées au clavier mais lues dans le fichier. Tu as déjà presque tout ce qu'il te faut : tu sais créer une structure à partir des données, tu sais construire la collection avec ces structures,... Il te manque juste l'extraction des données du fichier pour les fournir aux fonctions déjà écrites, si le programme est bien structuré, et qui feront le travail.

  7. #7
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2011
    Messages : 54
    Par défaut
    puis je vous envoyer mon code source en mp pour m'eclairer plus car cette histoire de fichiers melanges au programme a creer une confusion dans ma tete.(je sait comment mettre des donnes dans un fichier mais je ne sait pas comment les sortir)

  8. #8
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 166
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 166
    Billets dans le blog
    153
    Par défaut
    Bonjour,

    On ne parle pas trop de modification de fichiers car ce n'est pas trop possible. Effectivement, un fichier peut être vu comme un tableau sur le disque dur. Le problème de ce tableau, c'est qu'il ne peut être agrandi que par la fin.
    Cela fait que:
    - Si vous essayer d'ajouter du contenu au milieu, vous allez écraser les prochains éléments ;
    - Si vous essayer d'enlever du contenu, il faut déplacé tout les éléments.

    La méthode la plus simple revient à lire le fichier, à faire les modifications en mémoire et à réecrire le fichier d'une traite à partir de la mémoire.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  9. #9
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Citation Envoyé par ibuto Voir le message
    puis je vous envoyer mon code source en mp pour m'eclairer plus car cette histoire de fichiers melanges au programme a creer une confusion dans ma tete.(je sait comment mettre des donnes dans un fichier mais je ne sait pas comment les sortir)
    Non, on ne traite pas les sujets techniques par MP.
    Poste ton code dans un message du forum en l'encadrant par les balises [code]....[/code].

    Si le code est très long, tu peux dans un premier temps te contenter de fournir les données suivantes :
    - la définition des structures de données
    - les prototypes des fonctions (avec un petit commentaire si leur rôle n'est pas assez évident)
    - le code de la fonction réalisant l'écriture sur le fichier. C'est indispensable pour pouvoir les lire de savoir comment elles ont été écrites.

  10. #10
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2011
    Messages : 54
    Par défaut
    bonjour
    d'apres ce que j'ai lu dans vos divers posts la solution qui me vient a la tete est de creer une fonction charger qui lit le contenu du fichier avec la fonction fgets et cela a l'interieur d'une boucle ensuite d'ouvrir un nouveau fichier appliquer mes fonctions et le fermer .
    ce que je demande c'est est ce que fgets permet de connaitre le type de donnes existant dans le fichier (char,int....)?pour me permettre d'y travailler dessus.

    note importante :le fichier que j'ai cree n'est rien d'autre qu'un fichier texte pour me permettre de voir l'avancement correctement.

  11. #11
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Par défaut
    Citation Envoyé par ibuto Voir le message
    bonjour
    d'apres ce que j'ai lu dans vos divers posts la solution qui me vient a la tete est de creer une fonction charger qui lit le contenu du fichier avec la fonction fgets et cela a l'interieur d'une boucle ensuite d'ouvrir un nouveau fichier appliquer mes fonctions et le fermer .
    ce que je demande c'est est ce que fgets permet de connaitre le type de donnes existant dans le fichier (char,int....)?pour me permettre d'y travailler dessus.

    note importante :le fichier que j'ai cree n'est rien d'autre qu'un fichier texte pour me permettre de voir l'avancement correctement.
    fgets ne fait "que" lire des caractères provenant d'un flux et les place dans un buffer.
    Après, si tu veux extraire les différentes données de ce buffer, il faut parser. Cela dépend de ce que tu veux faire, du format que tu utilises pour enregistrer les données.

  12. #12
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2011
    Messages : 54
    Par défaut
    ce qu'ilya dans mon fichier texte n'est ni plus ni moins des valeurs ecrite de meme type que ce que j'ai montre dans mon premier post.le probleme ce ne sont que des valeurs alors que moi je veux charger des structures je suit vraiment au point mort la .

  13. #13
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par ibuto Voir le message
    ce qu'ilya dans mon fichier texte n'est ni plus ni moins des valeurs ecrite de meme type que ce que j'ai montre dans mon premier post.le probleme ce ne sont que des valeurs alors que moi je veux charger des structures je suit vraiment au point mort la .
    pour charger directement des structures, il faut un fichier binaire , et encore généré par le même type de machine...


    Sinon, ce qu'on fait la plupart du temps, c'est charger des valeurs et remplir des structures avec ces valeurs..


  14. #14
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 860
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par ibuto Voir le message
    ce que je demande c'est est ce que fgets permet de connaitre le type de donnes existant dans le fichier (char,int....)?pour me permettre d'y travailler dessus.
    Non. fgets() ne récupère qu'une chaine et s'arrête soit au premier '\n', soit quand le nb d'octets demandés a été atteint.
    Reprenons mon premier exemple: le fichier est structuré avec un enregistrement par ligne, chaque ligne contenant
    452:jean:claude:foot--basket
    Dans ces cas là, le principe est de récupérer toute la ligne dans une grosse chaine
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char ligne;[81]
    fgets(fp, 81, ligne);
    le "+1" parce qu'il faut un octet de plus pour le '\0' et parce que fgets() ayant conscience de ce besoin de '\0' lira n-1 octets quand on lui en demande n.

    Accessoirement, ta ligne se terminant par un '\n' inutile, rien ne t'empêche de l'enlever
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    char *pt;
    if ((pt=strrchr(ligne, '\n')) != NULL)
        *pt='\0';
    Tu remarqueras la subtilité où enlever un caractère en fin de chaine revient à le remplacer par '\0'

    Donc maintenant, ta chaine contient "452:jean:claude:foot--basket". Il va falloir l'exploser. Pour ça, il y a strtok() et mieux, strtok_r qui évite les static ce qui lui permet d'être réentrante (je ne vais pas dériver là-dessus mais crois-moi, il vaut mieux éviter strtok() surtout si tu l'appelles dans une fonction utilisée par une autre fonction appelant elle-aussi strtok() ).
    Donc strtok_r te permet de découper ta chaine sur le ":". Je suis un peu rouillé sur son utilisation (je tape à capella) donc j'espère ne pas me planter dans l'exemple qui suivra
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    char *token;    // Récupère le mot extrait
    char *contexte;          // Maintient le contexte ce qui permet, lors de l'appel suivant, à strtok_r de s'y retrouver
    int code;                   // Code
    char nom[20 + 1];            // Nom
    char prenom[20 + 1];     // Prénom
    char activite[40 + 1];     // Activité
     
    // Initialisation strtok_r
    contexte=NULL;
     
    // Récupération code
    token=strtok_r(ligne, ":", &contexte);
    sscanf(token, "%d", &code);
     
    // Récupération nom
    token=strtok_r(ligne, ":", &contexte);
    strcpy(nom, token);
     
    // Récupération prénom
    token=strtok_r(ligne, ":", &contexte);
    strcpy(prenom, token);
     
    // Récupération activité
    token=strtok_r(ligne, ":", &contexte);
    strcpy(activite, token);

    Donc non, rien ne permet au C de savoir qu'il y a un int ou une string. C'est toi qui le sait et qui appelle ce qu'il faut quand il faut. A partir de là, on peut tout faire...

    Citation Envoyé par ibuto Voir le message
    note importante :le fichier que j'ai cree n'est rien d'autre qu'un fichier texte pour me permettre de voir l'avancement correctement.
    Bref pour pouvoir l'éditer via le bloc-note quoi. Ce n'est pas interdit. D'ailleurs, sous unix et Linux, tous les fichiers systèmes sont éditables via le bloc-note. Ca permet ainsi de créer d'autres programmes qui pourront, eux-aussi, récupérer les datas du fichier (ou éventuellement en écrire) et même d'effectuer des tâches d'admin rien qu'avec le bloc-note.

    Donc l'avantage est de pouvoir contrôler. L'inconvénient est d'avoir un fichier bien plus volumineux que s'il était écrit en binaire. En effet, 15452 en texte prend 5 octets. Et 15452 en binaire (int) n'en prend que 2...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  15. #15
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2011
    Messages : 54
    Par défaut
    merci sve@r de ton dernier post j'ai effectivement suivi la meme direction en faisant une boucle qui lit tous les lignes du fichier j'ai utiliser des strcpy pour les string des atoi pour les int pour la liste de carctere j'ai tente une autre boucle mais je ne sait pas vraiment si ca marche en fait je suppose que cette fonction charger fonctionne(jusqu'a preuve du contraire) j'applique la fonction insertion activite. le probleme est de comment apporter la modification fait au fichier ouvrir le fichier en r+ et reapliquer la fonction? car je ne travaille pas directement avec des fichiers dans le main la seule fois ou je les ai utilise et dans ma fonction d'entrees de donnes de la personne c'est a dire j'insere et j'applique la fonction la c'est un peu complique


    est ce que j'entre dans le fichier avec un w et j'insere une personne avec les fonctions precedentes mais ca marche quant il y'a un seul mais a plusieurs les effacer tous pour une modification!!!!!!!

  16. #16
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Par défaut
    atoi pour les int
    La fonction atoi n'est pas sécurisée (on ne peut pas savoir si la fonction a échoué ou non), il est préférable d'utiliser à la place la fonction strtol : http://man.developpez.com/man3/strtol.3.php

  17. #17
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 860
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par ibuto Voir le message
    merci sve@r de ton dernier post j'ai effectivement suivi la meme direction en faisant une boucle qui lit tous les lignes du fichier j'ai utiliser des strcpy pour les string des atoi pour les int pour la liste de carctere j'ai tente une autre boucle mais je ne sait pas vraiment si ca marche en fait je suppose que cette fonction charger fonctionne(jusqu'a preuve du contraire) j'applique la fonction insertion activite. le probleme est de comment apporter la modification fait au fichier ouvrir le fichier en r+ et reapliquer la fonction? car je ne travaille pas directement avec des fichiers dans le main la seule fois ou je les ai utilise et dans ma fonction d'entrees de donnes de la personne c'est a dire j'insere et j'applique la fonction la c'est un peu complique

    est ce que j'entre dans le fichier avec un w et j'insere une personne avec les fonctions precedentes mais ca marche quant il y'a un seul mais a plusieurs les effacer tous pour une modification!!!!!!!
    1) tu crées une fonction load() qui ouvre le fichier en "r", lit tout le fichier et stocke tout son contenu dans tes mémoires et qui ferme le fichier
    2) tu travailles normalement, modifie tes datas en mémoire, vis ta vie quoi
    3) tu crées une fonction save() qui ouvre le fichier en "w" et écrit tout le contenu des mémoires dedans et qui ferme le fichier
    Et donc tu appelles l'une ou l'autre des fonctions quand ça te chante...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  18. #18
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 102
    Par défaut
    Citation Envoyé par Sve@r
    Dans ces cas là, le principe est de récupérer toute la ligne dans une grosse chaine
    Code c :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char ligne;[81]
    fgets(fp, 81, ligne);
    je met juste mon petit grain de sel pour faire mon malin...
    mais çà serait pas le contraire ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char ligne[81];
    fgets(ligne, 81, fp);
    mais bon.. je te met +1 car tu as fais tout le boulot ^^

  19. #19
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2011
    Messages : 54
    Par défaut
    merci de votre aide precieuse sve@r mais permet moi encore d'ajouter que si la sauvegarde se fait avec une entree en fichier" w "tout l'ancien contenu sera ecrase hors dans mon cas je ne sauvegarde qu'un seul adherent mais si je fait une entree dans le fichier avec un "a "la modification sera apporte mais l'anciene valeur restera(quel dilemne) .dans mon prochain post je posterai ma fonction charger() pour vous demandez conseil sur elle.

  20. #20
    Membre Expert
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    952
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 952
    Par défaut
    Salut,

    si la sauvegarde se fait avec une entree en fichier" w "tout l'ancien contenu sera ecrase
    Ce n'est pas vraiment un problème, avant de sauver le "toto.txt", il suffit de renommer celui qui est sur le disque en "toto.bak", tu auras toujours ainsi la dernière sauvegarde.

    Tes "fiches" ne sont pas de taille fixe, c'est pour cela que l'on ne peut pas remplacer dans un fichier une fiche par une autre. Le principe de chargement est assez simple. Tu crée une structure et tu remplis chacun de ses champs par ce que tu lis dans le fichier. Tu ajoutes ta fiche à ce que Diogène appelle la collection, puis tu recommences jusqu'à ce qu'il n'y ait plus de données dans le fichier.

    A+

    Pfeuh

Discussions similaires

  1. probleme avec les fichier jar
    Par maind5or dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 14/05/2007, 14h50
  2. Probleme avec les fichiers XML
    Par fle7a dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 17/07/2006, 10h32
  3. Probleme avec les fichier openGL32.dll et glu32.dll
    Par gazzall17 dans le forum OpenGL
    Réponses: 4
    Dernier message: 16/03/2006, 12h10
  4. Probleme avec les fichier faire un copier coller
    Par mcdonald dans le forum Général Python
    Réponses: 4
    Dernier message: 29/01/2006, 13h38
  5. [VB.NET] Probleme avec les fichiers!!
    Par ludovic85 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 20/01/2005, 17h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo