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 :

Écriture ordonnée sur fichier


Sujet :

C

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 3
    Par défaut Écriture ordonnée sur fichier
    Bonjour, je vous explique mon petit problème, (avant de faire les conditions if pour les différents cas dans mon algo de tri par age )

    j'ai voulu testé la faisabilité technique (dans le code ci-dessous) le prog nous demande des infos qu'on tape puis ils sont enregistrées et affichées par la même occasion

    j'ai voulu écrire les infos,non pas à la fin du fichier mais au début alors j'ai opté pour la fonction rewind() qui n'a pas fonctionné alors j'ai testé avec fseek(fichier,0,SEEK_SET) et la non plus ca ne marche pas

    je me suis dits que c'était du peut-être mode d'écriture "a" ou "a+" qui ajoute les infos à la fin du fichier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FILE *fichier = fopen("doc.txt","a+");
    j'ai testé avec les autres différents modes ,ca n'a rien donné , "r+" réagit comme "w+" sauf qu'elle n’écrase que l’équivalent des données saisies.

    si quelqu’un peut m'aider je suis preneur

    merci d'avance

    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <locale.h>
    #include "fun.h"
    #define TAILLE_MAX 1000
    #define TAILLE_STD 100
    #define TAILLE_MOY 500
    #define TAILLE_TEST 1
    infos personne[TAILLE_STD]={0};
    int age[TAILLE_STD]={0};
    int main()
    {
        setlocale(LC_CTYPE,"");
     
        int i,n;
        nat nation[TAILLE_STD];
        char chaine_for_display[TAILLE_MAX]={0};
        FILE *fichier = fopen("doc.txt","a+");
     
        if (fichier != NULL)
        {
            for (i=0;i<TAILLE_TEST;i++)
            {
                printf("Candidat N°%d\n",i);
                printf("NOM:");
                fgets(personne[i].nom, sizeof personne[i].nom,stdin);
                clean(personne[i].nom);
                printf("PRENOM:");
                fgets(personne[i].prenom, sizeof personne[i].prenom,stdin);
                clean(personne[i].prenom);
                printf("ADRESSE:");
                fgets(personne[i].adresse, sizeof personne[i].adresse,stdin);
                clean(personne[i].adresse);
                printf("AGE:");
                scanf("%d",&age[i]);
                printf("Choix de la nationalité Rapplons que \n1=FRANÇAIS\n2=BELGE\n3=AMERICAIN\n");
                printf("NATIONALITE:");
                scanf("%d",&nation[i]);
                purge();
                system("CLS");
                rewind(fichier); /*fseek(fichier,0,SEEK_SET);*/
     
                fprintf(fichier,"NOM COMPLET:%s %s,agé(e) de %d ans et résidant au %s",personne[i].nom,personne[i].prenom,age[i],personne[i].adresse);
                switch(nation[i])
                {
                case 1:
                    fputs(",de nationalité Française\n",fichier);
                    break;
                case 2:
                    fputs(",de nationalité Belge\n",fichier);
                    break;
                case 3:
                    fputs(",de nationalité Americaine\n",fichier);
                    break;
                default:
                    fputs(",la nationalité demeure inconnue\n",fichier);
                }
            }
            fclose(fichier);
        }
     
        fichier = fopen("doc.txt","r");
        if (fichier != NULL)
        {
            while (fgets(chaine_for_display,TAILLE_MAX,fichier)!= NULL)
            {
                printf("%s",chaine_for_display);
            }   fclose(fichier);
     
        }
     
        return 0;
    }

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 802
    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 802
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par alaaeddine18 Voir le message
    j'ai voulu écrire les infos,non pas à la fin du fichier mais au début alors j'ai opté pour la fonction rewind() qui n'a pas fonctionné alors j'ai testé avec fseek(fichier,0,SEEK_SET) et la non plus ca ne marche pas

    je me suis dits que c'était du peut-être mode d'écriture "a" ou "a+" qui ajoute les infos à la fin du fichier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FILE *fichier = fopen("doc.txt","a+");
    j'ai testé avec les autres différents modes ,ca n'a rien donné , "r+" réagit comme "w+" sauf qu'elle n’écrase que l’équivalent des données saisies.

    si quelqu’un peut m'aider je suis preneur
    Bonjour

    Tout d'abord, quelques remarques: rewind() et fseek() fonctionnent parfaitement. La première te ramène ton pointeur de fichier à son début et la seconde te le positionne où tu veux (donc au début si tu en as envie).
    Ensuite le mode "a" ouvre le fichier en écriture et positionne le pointeur à la fin, mais rien ne t'interdit ensuite de le remettre au début. Le mode "a+" est comme le mode "a" sauf que tu es autorisé aussi à lire ton fichier.
    Le mode "w" te donne un fichier vide (ou vidé) pour y écrire donc le pointeur est forcément au début, et le mode "w+" t'offre en plus la possibilité de le relire après y avoir écrit quelque chose (donc forcément en revenant préalablement en arrière entre l'écriture et la lecture). Et le mode "r" t'ouvre le fichier avec le pointeur au début pour le lire et "r+" te donne en plus possibilité d'y écrire. Un mode "r+" c'est comme un mode "a+" suivi d'un rewind(). Ou "a+" est comme un mode "r+" suivi d'un fseek(fichier, 0, SEEK_END).

    Mais le vrai problème c'est que écrire dans un endroit particulier du fichier ne décale pas ce qui s'y trouve déjà !!! C'est comme si tu écrivais une ligne avec un stylo puis que tu réécrives au même endroit => tu repasseras sur les lettres déjà écrites.
    Donc si tu veux écrire "au début" en décalant ce qui s'y trouve, c'est à toi de le programmer...
    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
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 3
    Par défaut
    merci pour ta réponse ,
    qu'est que t"en pense de cette méthode (copier un tableau dans un autres ensuite tt transférer dans un autre fichier et puis jongler entre les deux fichier)

    appelons le fichier d'origine, "A"

    * créer un autre et appelons le B mettre ce que je voulais rajouter au début de A
    * copier le reste de A à la suite de ce que j'ai mis dans B.
    * supprimer A
    * recréer A en le remplissant par B

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 802
    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 802
    Billets dans le blog
    1
    Par défaut
    Ca fonctionnera. Et t'es même pas obligé de "supprimer" A puisqu'en réécrivant tout B à partir du début de A tu écraseras ce qu'il y avait déjà. Et comme "B" contient le "A" d'origine plus ce que tu y as rajouté, "B" est forcément plus grand que "A" donc t'auras aucun résidu.
    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
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 392
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Ensuite le mode "a" ouvre le fichier en écriture et positionne le pointeur à la fin, mais rien ne t'interdit ensuite de le remettre au début.
    Attention, bien que techniquement vraie, cette phrase porte une implication fausse: Celle qu'il est possible d'écrire au début d'un fichier ouvert avec "a".
    Le pointeur retourne automatiquement à la fin lors de chaque écriture. Donc, bien qu'il soit possible de le remettre au début, ça n'a aucun effet sur l'écriture (mais en mode "a+", ça en a sur la lecture).

    Citation Envoyé par C11 chapitre 7.21.5.3 verset 6
    Opening a file with append mode ('a' as the first character in the mode argument)
    causes all subsequent writes to the file to be forced to the then current end-of-file,
    regardless of intervening calls to the fseek function.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  6. #6
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 3
    Par défaut
    oui en effet j'avais remarqué, d'ailleurs j’avais commencé par cette méthode (très facile et pratique ) si elle fonctionnait
    Maintenant je suis entrain de voir comment je pourrais copier les infos d'un fichier à l'autre en jonglant pour avoir le résultat voulu
    si vous avez un début d'idée ou un fonction déjà dispo je suis preneur
    merci à vous tous

Discussions similaires

  1. Réponses: 13
    Dernier message: 15/07/2007, 22h25
  2. Erreur aléatoire sur l'écriture d'un fichier
    Par Jorael dans le forum Delphi
    Réponses: 23
    Dernier message: 12/02/2007, 10h35
  3. [Rman]problème écriture sur fichier (linux)
    Par Invité dans le forum Oracle
    Réponses: 20
    Dernier message: 30/08/2006, 05h52
  4. Réponses: 2
    Dernier message: 29/05/2006, 09h54
  5. [VB.NET]Problème de lecture et écriture sur fichier texte
    Par zouhib dans le forum Windows Forms
    Réponses: 25
    Dernier message: 23/05/2006, 15h30

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