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 :

Manipulation de fichier


Sujet :

C

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2015
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2015
    Messages : 52
    Points : 26
    Points
    26
    Par défaut Manipulation de fichier
    bonjour ,

    je fais face a une difficulté pour terminer mon exercice

    je dois créer un programme qui permettra de créer un fichier pour les ouvriers d`une société avec leur nom , leur prénom , sexe et date de naissance , leur matricule . Ensuite ce programme doit être capable de demander à l'aide d'un menu :

    1. si on veut ajouter un ouvrier a la liste de ce fichier

    2. si on veut supprimer la liste des ouvriers en saisissant leur numéro matricule

    3. si on veut on veut consulter l'information d'un ouvrier en saisissant son numéro matricule
    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    #include<stdio.h>
    #include<conio.h>
    #include <stdlib.h>
     
    main()
    {
        FILE *FICHIER ;
        char nom[30] ,prenom[30] ,NOM_FICHIER[30] ,sexe[10];
        int matricule , datedenaissance ,n,i ;
     
        /*creer le fichier a remplir */
        printf("Entrez le nom du fichier :\n ");
      scanf("%s", NOM_FICHIER);
      FICHIER = fopen(NOM_FICHIER, "w");
     
        for ( i=0 ;i<1;i++)
        {
            printf("ouvrier Numero %d \n ",i+1);
            printf("entrez votre matricule SVP \n");
            scanf("%d", &matricule);
            printf("entrez votre nom SVP \n");
            scanf("%s", nom);
            printf("entrez votre prenom svp\n");
            scanf("%s", prenom);
            printf("sexe M/F \n");
            scanf("%s", sexe);
            printf("entrez votre date de naissance\n");
            scanf("%d", &datedenaissance);
            fprintf(FICHIER, "%d\n%s\n%s\n%s\n%d\n", matricule,nom ,prenom,sexe,datedenaissance);
        }/*fermetture du fichier */
        fclose(FICHIER);
     
        printf("------------menu--------------------------\n");
        printf("1- Ajouter un ouvrier a la liste \n ");
        printf("2-affichage de tous les enregistrements de ce fichier \n");
        printf("3-consulter une info grace a son matricule  \n");
        printf("4-supprimer une info grace a son matricule \n");
        scanf("%d",&n);
     
     
        switch(n)
                {
                case 1:    
     
                break;
     
                case 2:    
                 /* Affichage du fichier */
     
      printf("*** Contenu du fichier  %s ***\n", NOM_FICHIER);
     
    for ( i=0 ;i<1;i++)
        {
     
         fscanf(FICHIER, "%d\n%s\n%s\n", &matricule, nom, prenom,sexe);
     
         printf("Matricule : %d\t", matricule);
     
         printf("Nom et prénom : %s %s\n", nom, prenom);
     
        }
     
      /* Fermeture du fichier */
     
      fclose(FICHIER);
     
     
                break;
     
                case 3:    
                printf("");
                break;
     
                case 4:    
                printf("");
                break;
     
                }  
     
        getch();
    }
    mon problème je bloque à partir du menu

    quelqu'un pourrait m'aider SVP ?

    merci d'avance

  2. #2
    Membre éprouvé
    Avatar de ol9245
    Homme Profil pro
    Chercheur
    Inscrit en
    Avril 2007
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Avril 2007
    Messages : 985
    Points : 1 158
    Points
    1 158
    Billets dans le blog
    1
    Par défaut
    Ou est-ce que tu bloques exactement ? Pour ce que je peux voir de ton code, tu n'as pas encore réussi à récupérer la fiche d'un ouvrier à partir de son matricule. C'est donc une idée de fonction à écrire.

    un conseil général : tu dois découper ton codes en petites fonctions. Ordre de grandeur : 1 fonction = 5 à 10 lignes de code.

    un autre conseil général : regroupes les données d'un ouvrier dans une structure (struct UnOuvrier { ... }. Ca te facilitera le travail.
    "La vraie grandeur se mesure par la liberté que vous donnez aux autres, et non par votre capacité à les contraindre de faire ce que vous voulez." Larry Wall, concepteur de Perl.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2015
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2015
    Messages : 52
    Points : 26
    Points
    26
    Par défaut
    Au fait je débute en c donc c'est pourquoi j'aimerais d'abord le faire sans créer des fonctions. C'est ce qui me bloque

  4. #4
    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
    Bonjour,
    Citation Envoyé par KEVIN.DLL Voir le message
    Au fait je débute en c donc c'est pourquoi j'aimerais d'abord le faire sans créer des fonctions. C'est ce qui me bloque
    Vouloir commencer ainsi est une TRÈS mauvaise idée !!
    Si les cons volaient, il ferait nuit à midi.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2015
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2015
    Messages : 52
    Points : 26
    Points
    26
    Par défaut
    Mais bon je ne comprend pas encore les fonctions or je dois vite rendre ce exercice

  6. #6
    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
    Citation Envoyé par KEVIN.DLL Voir le message
    Mais bon je ne comprend pas encore les fonctions or je dois vite rendre ce exercice
    Bonjour

    Menu 1: ajouter un ouvrier => tu devrais savoir le faire vu que l'ajout c'est exatement comme le remplissage et que le remplissage tu l'as déjà fait. Donc pour l'ajout tu fais la même chose (saisie des infos et écritures dans le fichier)
    Menu 2: afficher les ouvriers => tu ouvres ton fichier, tu récupères les informations via fscanf au lieu de scanf
    Menu 3: afficher l'ouvrier ayant un certain matricule => c'est comme le 2 sauf que tu n'affiches que si le matricule lu correspond au matricule demandé
    Menu 4: effacer l'ouvrier => là c'est plus difficile car il faut comprendre qu'on n'efface pas ce qu'il y a dans un fichier. On ne peut que réécrire d'autres infos à la place des infos déjà existantes. Ou alors on réécrit un second fichier ne contenant plus l'info "effacée" puis on vient écraser le premier avec le second mais ça c'est super lourd.
    Donc là il faut réfléchir à une convention signifiant "cette info n'existe plus". Tu as pour ça seulement deux méthodes
    1. chaque info de ton fichier contient en plus un petit marqueur de ton choix (1 caractère). Quand ce caractère change, (par exemple '+' devient '-') c'est que l'info est "effacée" et dans ce cas tu ne l'affiches pas. Ensuite ne te reste plus qu'à parcourir ton fichier et à remplacer le '+' par le '-' pour l'ouvrier dont le matricule correspond
    2. Ou alors tu remplaces tes infos "effacées" par une ligne vide

    Il faut aussi savoir que quand tu as lu l'info, ton pointeur fichier est alors placé sur l'info suivante. Si tu écris quelque chose, tu écrases alors l'info suivante et non l'info que tu viens de lire; Il faut donc savoir se déplacer en arrière (et en avant) via la fonction fseek().

    Dans ton code, un des principaux problèmes c'est que tu écris un champ par ligne. Donc un ouvrier prend 5 lignes. C'est plus galère ensuite pour se positionner sur l'ouvrier X (il faut sauter (X -1) * 5 lignes). Généralement on a plutôt l'habitude d'écrire tous les champs sur une seule ligne (avec un séparateur spécifique comme par exemple ":") => fprintf(FICHIER, "%d:%s:%s:%s:%d\n", matricule,nom ,prenom,sexe,datedenaissance);. C'est plus facile à traiter car la fonction fgets() récupère une ligne d'un coup.

    Voilà pour l'aide. Maintenant mon avis perso, c'est que tu devrais très vite te mettre à bosser sérieusement. On ne peut pas t'avoir donné cet exercice sans t'avoir expliqué les fonctions, et tu mettras 50 fois plus de temps à le faire sans fonction (tu devras dupliquer plusieurs fois des codes identiques) qu'à les travailler, les comprendre et les appliquer. Parce que le C sans les fonctions c'est infaisable (ou presque)...
    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]

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2015
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2015
    Messages : 52
    Points : 26
    Points
    26
    Par défaut
    On n'a pas encore commence àvfaire des exercice sur les fonctions donc j'ai commence a m'y mettre moi même. Pour créer la fonction ajouter information et affichage je pensé pouvoir le faire mais pour supprimer ou modifier une information cela me pose problème.

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2015
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2015
    Messages : 52
    Points : 26
    Points
    26
    Par défaut
    je crois que finalement c'est mieux d'utiliser des fonctions .

    j'ai essaye de faire sa juste pour voir si je suis sur la voix
    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    #include<stdio.h>
    #include <stdlib.h>
    /*structure utilise*/
    struct employe   
    {
    int matricule;
    char nom[50];
    char prenom [50];
    char sexe[2];
    char nomfichier[30]; 
    } ;
    /*fonction pour afficher les informations*/
    void afficherInfo(FILE*fichier)
    {
    	employe E;
    	while(fscanf(fichier,"%d\n%s\n%s\n%s\n%d\n",&E.matricule,E.nom,E.prenom,E.sexe)>0)
    	{
    		printf("matricule: %d\n ",E.matricule);
    		printf("Nom et prenom:,%s %s\n",E.nom,E.sexe);
    		printf("sexe: %s\n",E.sexe);
    	}
    }
     
    /*fonction pour ajouter des donnees aux fichiers */
    void ajout(FILE*fichier)
    {
        char nomfichier[30];
    	employe E;
    	fichier=fopen(nomfichier,"w");
    	printf("saississez le numero matricule");
    	scanf("%d",E.matricule);
    	printf("nom :");
    	scanf("%s",E.prenom);
    	printf("sexe :");
    	scanf("%s",E.sexe);
    	fprintf(fichier, "%d %s %s %s \n",E.matricule,&E.nom,&E.prenom,&E.sexe);
    	fclose(fichier);
    }
     
    /*fonction pour supprimer une donnee */
     
    /*programme principal*/
    main()
    {
    employe E;
    int i,n;
        char nomfichier[30];
        FILE *fichier ;
        printf("Entrez le nom du fichier :\n ");
        scanf("%s", nomfichier);
        fichier=fopen(nomfichier,"w");
    	for ( i=0 ;i<4;i++)
    	{
    		printf("employe Numero %d \n ",i+1);
    		printf("entrez votre matricule SVP \n");
    		scanf("%d", E.matricule);
    		printf("entrez votre nom SVP \n");
    		scanf("%s", &
    		E.nom);
    		printf("entrez votre prenom svp\n");
    		scanf("%s", &E.prenom);
    		printf("sexe M/F \n");
    		scanf("%s", &E.sexe);
     
    		fprintf(fichier, "%d %s %s %s \n",E.matricule,&E.nom,&E.prenom,&E.sexe);
    	}/*fermetture du fichier */
    	fclose(fichier);
     
    		printf("------------menu--------------------------------------\n");
    	printf("1-ajouter un employe a la liste                       \n");
    	printf("2-affichage de tous les enregistrements de ce fichier \n");
    	printf("3-modification des informations d'un employe'         \n");
    	printf("4-consultation a partir du matricule                    ");
    	printf("5-supprimer une info grace a son matricule            \n");
    	printf("------------------------------------------------------\n");
    	scanf("%d",&n);
     
    	switch(n)
    	        {
    			case 1: 	
     
    			break;
     
    			case 2:
    				break;
            case 3: 	
    	        break;
     
    	        case 4: 	
    			printf("");
    	        break;
     
    			}
     
     
    return 0;
    }
    je devine que il y surement des petites erreurs

  9. #9
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 823
    Points : 7 119
    Points
    7 119
    Par défaut
    Je lis vite fait manquant de temps, ligne 15, on déclare par

    Voir un cours sur les structures en C

    D'autres ajouteront des détails supplémentaires,
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2015
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2015
    Messages : 52
    Points : 26
    Points
    26
    Par défaut
    et pour les fonctions ?

  11. #11
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 823
    Points : 7 119
    Points
    7 119
    Par défaut
    De quelle manière sont écrites les informations dans ton fichier ?
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  12. #12
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2015
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2015
    Messages : 52
    Points : 26
    Points
    26
    Par défaut
    Citation Envoyé par fred1599 Voir le message
    De quelle manière sont écrites les informations dans ton fichier ?
    je ne comprend pas trop

  13. #13
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 823
    Points : 7 119
    Points
    7 119
    Par défaut
    Tu écris les informations de l'ouvrier sur une ligne ou sur plusieurs ?
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  14. #14
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2015
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2015
    Messages : 52
    Points : 26
    Points
    26
    Par défaut
    Sur une ligne

  15. #15
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 823
    Points : 7 119
    Points
    7 119
    Par défaut
    Ok, c'est conceptuellement correct, par contre concernant ton code, tu l'as testé ? Ça donne ce que tu veux ?
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  16. #16
    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
    Citation Envoyé par KEVIN.DLL Voir le message
    et pour les fonctions ?
    Ben pour les fonctions tu commences à comprendre et à t'en sortir. Par exemple la fonction afficherInfo est très bien (à l'exception de la ligne 15 qui doit s'écrire struct employe E).

    Maintenant regarde: quelle différence il y a entre "afficher tous les employés" et "afficher un seul employé" ??? Dans un cas tu as un matricule et dans l'autre tu n'en as pas.

    Donc si tu réécris ta fonction ainsi
    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
    void afficherInfo(FILE*fichier, int matricule)
    {
    	struct employe E;
    	long pos=ftell(fichier);
    	rewind(fichier);
    	while(fscanf(fichier,"%d\n%s\n%s\n%s\n%d\n",&E.matricule,E.nom,E.prenom,E.sexe)>0)
    	{
    		if (matricule == -1 || E.matricule == matricule)
    		{
    			printf("matricule: %d\n ",E.matricule);
    			printf("Nom et prenom:,%s %s\n",E.nom,E.sexe);
    			printf("sexe: %s\n",E.sexe);
    		}
    	}
    	fseek(fichier, pos, SEEK_SET);
    }

    Déjà en lui rajoutant une gestion de position à base de ftell(), rewind() et fseek() elle devient indépendante de la position du marqueur de fichier. Quelle que soit cette position, quand elle commence elle se place au début du fichier et quand elle finit, elle restaure le marqueur à la position qu'il avait. Donc tu peux l'appeler quand tu veux sans dégats collatéraux.
    Et en plus elle est maintenant capable d'afficher (selon ton choix) un seul employé ou tous les employés. Quand tu veux un seul employé de matricule X tu appelles ta fonction comme ceci: afficherInfo(fp, X) et quand tu veux tous les employés tu l'appelles comme cela: afficherInfo(fp, -1). C'est ça aussi l'avantage des fonctions: elles sont capables de rendre un code facilement adaptable aux circonstances...

    Ensuite il existe des outils pour améliorer l'ergonomie. Par exemple si tu regardes la fonction, tu vois que le véritable travail commence à 3 tabulations du bord. Tu perds de l'espace pour coder.
    Si maintenant tu la réécris comme cela
    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
    void afficherInfo(FILE*fichier, int matricule)
    {
    	struct employe E;
    	long pos=ftell(fichier);
    	rewind(fichier);
    	while(fscanf(fichier,"%d\n%s\n%s\n%s\n%d\n",&E.matricule,E.nom,E.prenom,E.sexe)>0)
    	{
    		if (matricule != -1 && E.matricule != matricule) continue;
     
    		printf("matricule: %d\n ",E.matricule);
    		printf("Nom et prenom:,%s %s\n",E.nom,E.sexe);
    		printf("sexe: %s\n",E.sexe);
    	}
    	fseek(fichier, pos, SEEK_SET);
    }
    Algorithmiquement c'est pareil. Au lieu de chercher les informations qui m'intéressent pour n'afficher que celles-ci, je cherche et écarte celles qui ne m'intéressent pas et affiche toutes les autres (attention aux lois de "De Morgan" => non(A et B) = non(A) OU no(B) et non(A ou B) = non(A) ET non(B)). Mais je gagne une tabulation sur la gauche. Mais ça c'est du détail pour plus tard (en plus certains profs n'aiment pas les break/continue).
    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]

  17. #17
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2015
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2015
    Messages : 52
    Points : 26
    Points
    26
    Par défaut
    hier j'ai longuement réfléchi et j'ai réussi mais le problème mais je n'arrive pas à mettre le fichier en txt je devine qu'il est en binaire j'ai longuement passö la journee sur ce cours C . mais je bloque .

    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    #include <stdio.h>
    #include <stdlib.h>
    #include <conio.h>
    #include <string.h>
    #include <windows.h>
    /*programme principal */
    main()
    {
                  FILE *fp , *ft; 
                  char autrechoix, choix , nomfichier[30];
                  int i ;
                  /*structure de l'employe*/    
                  struct emp{
    	          int matricule;
                  char nom[40]; 
                  char prenom[40];
    	  	      char sexe [1]; 
                  int datenai ; 
                            };
                   /*structure */
                    struct emp e; 
                    /*variable pour enregistrer le matricule des employes*/
                    char empmatricule[40]; 
                    /*taille de chaque enregistrement */
                    long int recsize; 
     
                    /*creation du fichier */
                    fp = fopen("EMP.DAT","rb+");
                    if(fp == NULL)
                    {
                       fp = fopen("EMP.DAT","wb+");
                       if(fp == NULL)
    	             	{
                     printf("Impossible d'ouvrir le fichier");
                     exit(1);
                        }
                    }
     
                    /*taille de chaque enregistrement exemple pour la structure e */
                    recsize = sizeof(e);
     
                    /*creer le fichier a remplir*/
                    fseek(fp,0,SEEK_END);
                    for (i=0;i<4;i++)
                    {
    	             printf("----employe #%d--------- \n",i+1);
    	             printf("entrez le numero de matricule SVP\n");
    	             scanf("%d",&e.matricule);
    	             printf("entrez le nom \n");
    	             scanf("%s",e.nom);
    	             printf("entrez le prenom\n");
    	             scanf("%s",e.prenom);
    	             printf("sexe :M/F\n");
    	             scanf("%s",e.sexe);
    	             printf("votre date de naissance (JJ/MM/AAAA)\n");
    	             scanf("%d",&e.datenai);
    	             fwrite(&e,recsize,1,fp);
                    }
     
    	printf("|-----Bienvenue au Menu de Gestion---------------------|\n");
    	printf("|1-ajouter un employe a la liste                       |\n");
    	printf("|2-affichage de tous les enregistrements de ce fichier |\n");
    	printf("|3-modification des informations d'un employe'         |\n");
    	printf("|4-consultation a partir du matricule                  |\n");
    	printf("|5-supprimer une info grace a son matricule            |\n");
    	printf("|------------------------------------------------------|\n");
    	fflush(stdin);
    	choix  = getche();
     
    	    switch(choix)
    		{
     
    	     	case '1':
    	     	  autrechoix = 'y';
    	     	  fseek(fp,0,SEEK_END);
    	     	  while(autrechoix == 'y')	     	  
    			{
    	     	  printf("----nouveau employe--------- \n");
    	          printf("entrez le numero de matricule SVP\n");
    	          scanf("%d",&e.matricule);
    	          printf("entrez le nom \n");
    	          scanf("%s",e.nom);
    	          printf("entrez le prenom\n");
    	          scanf("%s",e.prenom);
    	          printf("sexe :M/F\n");
    	          scanf("%s",e.sexe);
    	          printf("votre date de naissance (JJ/MM/AAAA)\n");
    	          scanf("%d",&e.datenai);
    	          fwrite(&e,recsize,1,fp);
    	          printf("\n un autre enregistrement ? (y/n) ");
                  fflush(stdin);
                  autrechoix = getche();
    	        }
    	        break;
     
    	        case '2':
    	           rewind(fp);
    	            while(fread(&e,recsize,1,fp)==1)
    			    {
    	        	printf("\n %d %s %s %s %d",e.matricule,e.nom,e.prenom,e.sexe,e.datenai);
    	        	}
    	        	getch();
                    break;
     
               case '3':
               	    autrechoix = 'y';
                 	while(autrechoix == 'y')
    			   {
               	        printf("Entrer le numero de matricule de l'employe:");
                        scanf("%s", empmatricule);
                        rewind(fp);
                        while(fread(&e,recsize,1,fp)==1)
    					{ /*comparaison des donnees */
                            if(strcmp(e.nom,empmatricule) == 0)
    						{ /* si le matricle correspond */
                                printf("\n re-entrer a nouveau les information : ");
                                scanf("%d %s %s %s %d",&e.matricule,e.nom,e.prenom,e.sexe,&e.datenai);
                                fseek(fp,-recsize,SEEK_CUR); /*changer la position du curseur */ 
                                fwrite(&e,recsize,1,fp); /*ecraser l'enregistrement*/
                                break;
                            }
                        }
     
                        printf("\n modifier d'autres donnees ? (y/n)");
                        fflush(stdin);
                        autrechoix = getche();
                   }
                break;
     
     
    			case '4':
    				    autrechoix = 'y';
    				    while(autrechoix == 'y')
    				{
    			        printf("\nEntrez le numero de matricule de l'employe a supprime: ");
                        scanf("%s",empmatricule);
                        /*creation d'un fichier temporaire*/
                        ft = fopen("tmp","wb");  
                        rewind(fp); 
                        while(fread(&e,recsize,1,fp) == 1)
    					{ 
    					/*lire tous les enregistrements du fichier*/
                            if(strcmp(e.nom,empmatricule) != 0)
    						{ 
    						/* si les donnees entrees correspondent*/
    						/*deplacer tous les enregistrements excpetes ce qui doit etre efface */
                                fwrite(&e,recsize,1,ft);   
                                printf("supprimer un autre enregistrement ? (y/n)");
                                fflush(stdin);
                                autrechoix = getche();
                            }
                        }
                    }
                        fclose(fp);
                        fclose(ft);
                        remove("EMP.DAT"); /*retirer le fichier original*/
                        rename("tmp.dat","EMP.DAT"); /*renomer le fichier temporaire au fichier original*/
                        fp = fopen("EMP.DAT", "rb+");
        	            break;
     
    	    } 	    
        return 0;
    }
    quand j'essai de le mettre en .txt j'ai des erreurs , si quelqu'un voudrait bien m'aider à le maitre en .txt ?
    merci d'avance

  18. #18
    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
    Citation Envoyé par KEVIN.DLL Voir le message
    hier j'ai longuement réfléchi et j'ai réussi mais le problème mais je n'arrive pas à mettre le fichier en txt je devine qu'il est en binaire j'ai longuement passö la journee sur ce cours . mais je bloque .
    Au lieu de l'ouvrir avec le flag "r+b" tu l'ouvres avec le flag "r+" tout simplement. Et ta double ouverture (l'ouvrir en "r" sinon l'ouvrir en "w") ne sert à rien. On n'ouvre pas un fichier au petit bonheur, on l'ouvre dans le mode que l'on désire pour travailler. Si tu l'ouvres en "w" tu perds tout ce qu'il y a dedans...
    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]

  19. #19
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2015
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2015
    Messages : 52
    Points : 26
    Points
    26
    Par défaut
    Oui mais et pour transformer le fichier binaire .dat en texte .txt parce que quand j'essais je vois des caractères inconnu

  20. #20
    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
    Citation Envoyé par KEVIN.DLL Voir le message
    Oui mais et pour transformer le fichier binaire .dat en texte .txt parce que quand j'essais je vois des caractères inconnu
    C'est quoi cette nouvelle histoire ??? Ton sujet d'origine parlait de remplir un fichier (présumé vide) avec des informations saisies. Maintenant tu parles d'un ".dat" inconnu (dans le code il y a un "tmp.dat" qui sort d'on ne sais où) et tu nous dit que tu veux le transformer en texte ??? Quel est le rapport ???

    En tout cas, tu ne peux pas transformer un binaire en texte comme ça. C'est comme si tu voulais transformer un .mp3 en texte ; ça ne se peut pas.
    Un fichier texte est un fichier ne contenant que des caractères affichables (lettres, chiffres, ponctuation, espace). Un fichier binaire est un fichier pouvant contenir toute la gamme des caractères possibles et codé selon un certain format que tu dois connaitre. Donc si le binaire contient des informations particulières, et si tu connais le format de ces informations pour pouvoir les récupérer ; alors tu peux ensuite écrire ces informations de façon lisibles dans un second fichier qui sera alors considéré comme un fichier texte.
    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]

Discussions similaires

  1. Manipulation de fichier (copier, supprimer, déplacer)
    Par Guigui_ dans le forum Général Python
    Réponses: 1
    Dernier message: 21/10/2004, 10h26
  2. Manipulation des fichiers
    Par monsau dans le forum Langage
    Réponses: 7
    Dernier message: 21/09/2004, 17h45
  3. [LG]Manipulation de fichiers
    Par yffick dans le forum Langage
    Réponses: 29
    Dernier message: 10/01/2004, 15h04
  4. Manipulation de fichiers - gestion d'extensions
    Par ulukai dans le forum Linux
    Réponses: 13
    Dernier message: 02/07/2003, 15h28
  5. Réponses: 2
    Dernier message: 18/01/2003, 17h06

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