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 :

Problème avec fichier !


Sujet :

C

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 11
    Points : 0
    Points
    0
    Par défaut Problème avec fichier !
    Bonjour tout le monde, je suis de retour, j'ai besoin de votre aide concernant les fichiers, je m'explique:

    J'ai réalisé un programme qui gère un cabinet médical (création des rendez-vous pour les patients, modifier ou annuler les rendez-vous, et bien sur la gestion de la salle d'attente), maintenant il faut enregistrer les dossier des patients (c'est à dire après la fermeture du programme je dois garder les informations des patients stocker): comme vous savez chaque cabinet médical à un archive de ses patients, c'est pour ça que je dois utiliser un fichier pour enregistrer les informations des patients (c'est à dire les champs de ma structure dans mon programme tel que: nom, prénom, maladie, traitement...etc).

    je connais presque rien concernant les fichier j'ai bien cherché mais je vous demande de m'orienter! Est ce que je cherche les fichiers en général ou bien une partie bien précise, j'ai trouvé des explication concernant l’écriture et la lecture des fichiers mais je sais pas vraiment je dois commencer par quoi ?

    Merci d'avance.

  2. #2
    Membre émérite
    Avatar de supersnail
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 719
    Points : 2 793
    Points
    2 793
    Par défaut
    Bonjour,

    Pour sauvegarder tes données dans un fichier (i.e. tes structures), il faut déjà réfléchir et définir le format de fichier que tu vas utiliser: soit tu enregistres le tout dans un fichier "texte" (i.e. lisible et modifiable sans trop de difficultés par un humain) avec une structure particulière (qui peut être un fichier clé-valeur, CSV, XML, JSON et j'en passe), soit tu enregistres tes données dans un format binaire.

    Sinon concernant les fichiers proprement dits, t'as juste besoin de savoir ouvrir un fichier, lire/écrire dedans et fermer le fichier (et faire particulièrement attention à pas déborder de tes buffers quand tu lis les données d'un fichier )
    Toute question technique envoyée en MP ira directement à la poubelle

    Un code ne marchera jamais, il n'a jamais reçu la capacité de se déplacer.
    Inutile donc de dire "ça marche pas", donnez plutôt des informations précises afin de mieux pouvoir vous aider.


    Grand gourou de la -attitude

  3. #3
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Avant la manipulation des fichiers, tu dois savoir ce que tu veux y écrire.
    Quel est le format exact du fichier ? Est-ce du texte "human readable" par exemple au format CSV ou des données brutes du genre contenu d'une structure en RAM ?
    Lorsque les règles sont clairement et formellement établies, tu vas pouvoir commencer à coder.

    As-tu déjà fait un mini-programme qui écrit "hello world" dans un fichier ? Quels problèmes as-tu rencontré ? Qu'est-ce que tu ne comprends pas ?

    EDIT : trop lent
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 11
    Points : 0
    Points
    0
    Par défaut
    Bonjour merci pour vos réponse!

    Bon je comprends pas beaucoup les genre des fichiers (human et binaire ), comme je viens de dire je connais rien concernant les fichiers, ce qui est
    demander dans mon travail c'est de créer une liste chaînées "fichier" (est ce que ça vous dis quelque chose ?)...genre pour mon projet j'ai une liste chaînée pour la création des rendez-vous, une autre pour la gestion des rendez-vous de la salle d'attente, et ce qui est demander maintenant c'est de créer une troisième liste chaînée (un fichier), c'est comme un archive pour stocker les informations des patients (les rendez-vous), c'est à dire même si je ferme l'application je perd pas les informations.

    Mais je sais pas je dois commencer par ou, est-ce que je cherche des explications concernant les fichiers (des cours C), ou bien vous me proposer de chercher une partie bien précise (qui concerne ma problématique) ?

  5. #5
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Pai,

    C'est plutôt bizarre : tu affirmes avoir réalisé le programme, et tu n'as pas la moindre connaissance sur l'utilisation des fichiers ?

    Accessoirement, ce genre de données est mieux géré avec une base de données.
    Si les cons volaient, il ferait nuit à midi.

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 11
    Points : 0
    Points
    0
    Par défaut
    C'est plutôt bizarre : tu affirmes avoir réalisé le programme, et tu n'as pas la moindre connaissance sur l'utilisation des fichiers ?
    Oui j'ai réalisé le programme avec des listes chaînées, je sais travailler avec les listes chaînées et les pointeurs.... mon problème c'est les fichiers, je connais pas les syntaxes et tout..., maintenant je suis entrain de lire un cours sur l'ouverture et la fermeture d'un fichier puis je passe à la lecture et l’écriture, ce que j'ai réalisé n'a aucun rapport avec les fichiers jusqu’à maintenant !

  7. #7
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    alors commence par notre faq, assez fournie sur le sujet.

    Comme l'on dit les autres, il s'agit de savoir qu'un fichier est une suite de caractères ou d'octets (selon la manière de le regarder).

    Un programme lit un fichier en s'attendant à ce qu'il soit écrit d'une certaine manière.
    Un format de fichier correspond à une de ces manières.

    Par exemple, un .csv correspond à des suites de valeurs séparées par des ';', chaque suite étant mise sur une ligne.
    Partant de là, la suite "09;01;16;17;02" peut correspondre à beaucoup de chose.
    • la date et l'heure (16 janvier 2009, 17h02)
    • une autre date et heure (9 janvier 2016, 17h02)
    • un numéro de téléphone


    C'est au programme d'interpréter cette série.

    Et pour écrire dans un fichier, il faut faire le travail inverse.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  8. #8
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 11
    Points : 0
    Points
    0
    Par défaut
    Dans la faq il ya pas comment créer un fichier, genre la base, il ya juste la suppression, supprimer une ligne et d'autre concept plus développé, moi je cherche la base, bon ça fait 3 heurs je suis entrain de chercher j'ai trouvé comment ouvrir et fermé un fichier et même écrire, et il faut créer un fichier.txt dans le même dossier qui contient le programme, et j'ai trouvé ce programme là:

    Code : 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
    int main(int argc, char *argv[])
    {
        FILE* fichier = NULL;
        int age = 0;
     
        fichier = fopen("test.txt", "w");
     
        if (fichier != NULL)
        {
            // On demande l'âge
            printf("Quel age avez-vous ? ");
            scanf("%d", &age);
     
            // On l'écrit dans le fichier
            fprintf(fichier, "Le Monsieur qui utilise le programme, il a %d ans", age);
            fclose(fichier);
        }
     
        return 0;
    }
    j'ai testé sur code::blocks ça marche et quand j'ouvre le fichier.txt je trouve exactement la même phrase:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fprintf(fichier, "Le Monsieur qui utilise le programme, il a %d ans", age);
    Je demande comment pour faire la même chose dans mon code....par exemple dans mon case 1 de mon switch je crée des rendez-vous, est ce qu'il suffi d’insérer le code en haut a l’intérieur du case 1 pour que je puise enregistrer les rendez-vous des patients, et par la suite quand je vais ouvrir le fichier.txt je vais trouver les même rendez-vous ?

    Merci.

  9. #9
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Kie,

    Cherche un peu, il y a de nombreuses pages proposant des cours, des tutos...
    Si les cons volaient, il ferait nuit à midi.

  10. #10
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 11
    Points : 0
    Points
    0
    Par défaut
    Pas la peine de dire ! Qui cherche trouve ! j'aime programmer je cherche tout le temps, je demande votre aide que dans des cas urgent...vous savez bien que quand tu cherche un cours sachant que t'es débutant c'est pas difficile comprendre le problème c'est de faire; (pour mon cas:trouver un moyen pour insérer les fichiers dans mon code qui contient que des fonctions, des structures, des listes chaînées et des pointeurs...et combiner les listes chaînées et les fichiers)

  11. #11
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    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 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par llDeathll Voir le message
    et il faut créer un fichier.txt dans le même dossier qui contient le programme
    Pas forcément dans le même dossier. Tu peux très bien le créer complètement ailleurs tant que tu donnes le bon chemin. Et l'extension" .txt" (qui n'est là que pour les humains) ne se met que si tu écris un fichier "texte" c'est à dire lisible par un éditeur style "notepad". Bien entendu rien ne t'interdit d'écrire de l'excel dans un ".txt" mais alors tu perds l'utilité de l'extension (et tu induis tout le monde en erreur, y compris ton OS qui est programmé pour ouvrir du ".txt" d'une certaine façon).

    Citation Envoyé par llDeathll Voir le message
    Je demande comment pour faire la même chose dans mon code....par exemple dans mon case 1 de mon switch je crée des rendez-vous, est ce qu'il suffi d’insérer le code en haut a l’intérieur du case 1 pour que je puise enregistrer les rendez-vous des patients, et par la suite quand je vais ouvrir le fichier.txt je vais trouver les même rendez-vous ?
    Te faut organiser ton travail. Est-ce que par exemple tu veux tout charger en mémoire puis écrire tes infos une fois le travail terminé, ou bien écrire les choses au fur et à mesure ? Est-ce que tu préfères des enregistrements ayant tous la même taille (permet d'aller facilement chercher un enregistrement "n" en se déplaçant de "n" fois la taille) ou bien des enregistrements correspondants réellement aux infos à stocker (gain de place pour ton fichier) ?

    Une fois que tu seras organisé, tu pourras découper ton problème en tâches élémentaires. Par exemple tu pourras écrire une fonction qui se charge d'aller chercher les infos d'un patient X dans le fichier, une autre qui se charge de l'y écrire. Plus tes fonctions sont petites, plus tu pourras les réutiliser facilement...
    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]

  12. #12
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 11
    Points : 0
    Points
    0
    Par défaut
    Je vais essayé de bien expliquer..ben ce qui est demander c'est:

    -créer une liste chaînées et la remplir avec des rendez vous (rendez-vous des patient) à l'aide de cette structure:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    typedef struct patient
    {
        char nom[10];
        char prenom[10];
        char tel[10];
        int numpatient;
        char maladie[20];
        char traitement[10];
        dte date;
        H heure;
        struct patient *next;
    }patient;
    Après avoir créer les rendez-vous, il faut les modifiés (c'est à dire modifier la date, l'heure..etc), ensuite le programme doit contenir aussi une partie qui permet d'annuler un/des rendez-vous.

    Parmi ce qui est demandé aussi, c'est de créer une deuxième liste chaînées qui gère la salle d'attente (c'est à dire qui contient que les rendez-vous de la même journée + une partie consultation), en gros c'est la gestion d'un cabinet médical.

    J'arrive à réaliser tout ce travaille.

    Maintenant, pour ce que je vais dire , c'est le comment que je connais pas

    Il faut créer une troisième liste chaînée (fichier dans la mémoire), elle va permettre de stocker les informations des patients après consultation (comme un archives dans un cabinet), c'est à dire même après la fermeture de l'application, je perd pas ces informations (le nom, prénom, traitement, maladie....etc)

    Te faut organiser ton travail. Est-ce que par exemple tu veux tout charger en mémoire puis écrire tes infos une fois le travail terminé, ou bien écrire les choses au fur et à mesure ?
    Je pense que je dois enregistrer les choses au fur et à mesure (c'est à dire, juste après la consultation d'un patient on sauvegarde ces informations dans le fichier, comme ça après la fin des rendez-vous, tout sera enregistrer dans le fichier).

    Je trouve des difficultés pour réaliser cette partie (sachant que j'ai cherché pas mal de cours sur les fichiers mais je sais pas comment introduire ce que j'ai compris)

  13. #13
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 15
    Points : 17
    Points
    17
    Par défaut
    Bonjour,
    imaginons que tu veuilles enregistrer ces informations en format binaire, voici une implémentation qui te permet d'ajouter une liste de patients dans un fichier donné.
    Code : 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
    int save_patients(patient pat)
    {
    	// Ouvre le fichier en mode d'ajout
    	FILE * fichier = fopen("patient.dat", "a");
    	if (fichier == NULL)
    		return 1;
     
    	// Parcours la liste de patients et les écrits dans
    	// le fichier
    	patient * p = &pat;
    	while( p != NULL)
    	{
    		fwrite(p->nom, 1, 10, fichier);
    		fwrite(&(p->numpatient), 1, 1, fichier);
    		p =  p->next;
    	}
    	// Penser à fermer le fichier
    	fclose(fichier);
    	return 0;
    }
    Et pour lire les données :
    Code : 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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    /**
     * Lis 1 patient dans le fichier et renvoie NULL si
     * c'est impossible.
     */
    patient * parse_patient(FILE * fichier)
    {
    	patient * p = malloc(sizeof(patient));
    	if (p == NULL)
    		return NULL;
     
    	if (fread(p->nom, 1, 10, fichier) != 10)
    		return NULL;
    	if (fread(&(p->numpatient), 1, 1, fichier) != 1)
    		return NULL;
     
    	return p;
    }
     
    /**
     * Lis la liste de tous les patients du fichier
     */
    patient* read_patients()
    {
     
    	// Si on ne peut lire le fichier, la liste est vide
    	FILE * fichier = fopen("patient.dat", "r");
    	if (fichier == NULL)
    		return NULL;
     
    	// On lit le premier patient : c'est la liste.
    	patient * first;
    	first = parse_patient(fichier);
    	// On continue de lire pour avoir toute la liste.
    	patient * p =  first;
    	while (p != NULL)
    	{
    		p->next = parse_patient(fichier) ;
    		p = p->next;
    	}
     
    	fclose(fichier);
    	return first;
    }

    Cette implémentation est facile à faire, car chacun de tes patients est écrit sur le même nombre d'information (10 pour le nom, 1 pour le numero, soit 11 dans mon cas). Si tu veux lire ou écrire des informations, au fur et à mesure, à toi d'adapter les fonctions utilisées. Pour cela, je te conseille de regarder la fonction fseek. Par exemple, en faisant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    fseek(fichier, 11*5, SEEK_SET) ;  
    p = parse_patient(fichier);
    avec les fonctions que je t'ai données te permet de lire le patient 5+1=6.

    Autre possibilité, tu peux écrire les données sous format texte, en t'inspirant par exemple du format CSV qui est adapté pour le tableau de donnée. Mais alors, parser les données (découper le fichier en plusieurs partie pour lire les données) sera plus difficile.

  14. #14
    Membre expérimenté
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    946
    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 : 946
    Points : 1 351
    Points
    1 351
    Par défaut
    Hello,

    Citation Envoyé par droggo Voir le message
    Accessoirement, ce genre de données est mieux géré avec une base de données.
    Je plussoie, ne serait-ce que pour exporter plus tard vers un programme professionnel... A moins que ce ne soit un exercice purement scolaire?

    A+

    Pfeuh

Discussions similaires

  1. Problème avec fichier .exe
    Par rostomus dans le forum MATLAB
    Réponses: 3
    Dernier message: 28/12/2006, 17h02
  2. [XSL] Problème avec fichier distant
    Par ploxien dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 19/10/2006, 20h24
  3. Problème avec fichier Excel génère erreur
    Par Yanmeunier dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 17/02/2006, 11h53
  4. [Delphi 3] Problème avec fichier ressource .RES
    Par delphim dans le forum EDI
    Réponses: 2
    Dernier message: 28/06/2005, 18h11
  5. Problème avec fichier texte
    Par jpdelx dans le forum ASP
    Réponses: 7
    Dernier message: 13/11/2003, 13h17

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