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 :

union sur des fichiers séquentiel


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2003
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2003
    Messages : 93
    Par défaut union sur des fichiers séquentiel
    bonsoir, j'aurais besoin d'un petit éclaircissement sur les opérations sur des fichiers séquentiel...

    j'ai pris l'exemple d'une union pour comprendre le principe:

    On a un fichier A contenant plusieurs lignes, chaque ligne contient le contenu d'une structure complète (chaine chaine entier)

    On a un autre fichier B contenant lui aussi plusieurs ligne de structure.

    l'union consistant à mettre dans un fichier, tout le contenu de A et de B sans qu'une ligne identique apparaisse plus d'une fois.

    voici une partie de mon code:
    on as deux fichiers "file1" et "file2", et mon code rajoute juste tout le contenu de "file1" à la fin de "file2"
    Il faudrais tester si la ligne rajouter ne soit pas déja présente dans "file2", et c'est sur ce point que 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
    typedef struct{
    	char nom[MAX], prenom[MAX];
    	int age;
    } t_element;
     
    t_element lire_element (FILE *p_file) {
       t_element data;
       fscanf(p_file, "%s", data.nom);
       fscanf(p_file, "%s", data.prenom);
       fscanf(p_file, "%d", &data.age);
       fflush(stdin);
       return data;
    }
     
    int comparer_data (const t_element data1, const t_element data2) {
       return (data1.age == data2.age &&
                !strcmp(data1.nom, data2.nom) &&
                !strcmp(data1.prenom, data2.prenom));
    }
     
    ...
    t_element data;
    	while (1)
    	{
        data = lire_element (p_file1);
    		if (feof(p_file1)) break;
    		fprintf(p_file2, "%s ", data.nom);
    		fprintf(p_file2, "%s ", data.prenom);
    		fprintf(p_file2, "%d\n", data.taille);
    	}
    ...

  2. #2
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par défaut
    Quelle structure utilises-tu pour tes fichiers ?
    Je te pose cette question car l'algo détaillé dépendra de la structure utilisée.
    Sinon, on peut envisager un algo un peu général qui laisse dans l'ombre pas mal de détails :

    Dans mon exemple, on a au départ deux fichier f1 et fF2, et on fusionne f21 dans f1, celà te donnera une idée. On suppose évidemment que f1 est sans doublons.

    f1 est ouvert en lecture écriture
    f2 est ouvert en lecture
    enr1 est un enregistrement lu dans f1
    enr2 est un enregistrement lu dans f2
    trouve indique si l'enregistrement enr2 a été trouvé dans f1

    L'algo peut d'écrire sous cette forme

    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
    tant que f2 n'est pas lu en entier faire
    début
        enr2 <- nouvel élément lu dans f2
        se positionner en début de F1
        trouve <- faux
        tant que trouve = faux et f1 n'est pas lu en entier faire
        debut
            enr1 <- nouvel élément de f1
            si enr1 et enr2 sont identiques alors
              trouve <- vrai
            fin si
        fin tant que
        si trouve = faux alors
          enregistrer enr2 dans f1
        fin si
    fin tant que
    A toi d'adapter à ton cas particulier de test et de lecture des fichiers.
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    86
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 86
    Par défaut
    beurk fflush ne doit ètre utilisé que dans un flux ouvert en ecriture


    tu peux le remplacer par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    scanf("%*[^\n]");
    getchar();

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2003
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2003
    Messages : 93
    Par défaut
    mhhh si j'ai bien tout suivi, faudrais faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Debut
      Tant que fin de file1 non atteint
        data = lire_element (file1)
        Positionner début file2
        Tant que fin de file 2 non atteint 
          si data = lire_element (file2) sortir_boucle
        fin tq
        si on est à la fin de file2 // element non trouvé
          écrire data sur file2
      fin tq
    fin
    le probléme, c'est que je maitrise pas trop les fonctions lié aux fichiers donc je sait pas retranscrire cet algo en C...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 7
    Dernier message: 09/12/2005, 23h26
  2. Information sur des fichiers
    Par melmouj dans le forum C
    Réponses: 52
    Dernier message: 18/10/2005, 15h24
  3. Requete sur des fichiers XML
    Par buildit dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 10/05/2005, 10h57
  4. Réponses: 5
    Dernier message: 05/06/2004, 13h12
  5. Extraction de données sur des fichiers excel
    Par iupgeii dans le forum MFC
    Réponses: 3
    Dernier message: 23/01/2004, 13h53

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