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 :

supprimer redondance dans un fichier


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de scofild20
    Inscrit en
    Mars 2007
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 109
    Par défaut supprimer redondance dans un fichier
    bonjour, je travaille sur un générateur de mots , pour une langage donnée

    voici mon problème , j'ai pu construire un fichier qui contient tout les mots possibles pour ce langages mais avec redondances

    alors je veux savoir si quelqu'un a une fonction pour supprimer les redondances dans un fichier , sa va me facilité beaucoups la tache.
    merci

  2. #2
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Par défaut
    Et bien commence déjà par trier les lignes de ton fichier par ordre alphabetique (des tas d'algo de tri sont dispo sur le net).

    Ensuite, si il y a des doublons, ils seront côte à côte et facile à éliminer.

  3. #3
    Membre confirmé Avatar de scofild20
    Inscrit en
    Mars 2007
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 109
    Par défaut
    le fichier est déja trier. j'ai volus gagné un peu de temps avec une fonction qui supprime les redondances , j'ai pas trouvé sur le net pour le c/c++

    pour d'autre langages oui

  4. #4
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par scofild20 Voir le message
    le fichier est déja trier. j'ai volus gagné un peu de temps avec une fonction qui supprime les redondances , j'ai pas trouvé sur le net pour le c/c++

    pour d'autre langages oui
    Ou veut tu supprime les redondances. Aprés lecture dans le fichier???
    tu utilise quoi pour stocker tes mot??
    Pour contenaire trié il existe l'algo std::unique
    Sinon mieux il exist le contenaire std::map

  5. #5
    Membre confirmé Avatar de scofild20
    Inscrit en
    Mars 2007
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 109
    Par défaut
    Ou veut tu supprime les redondances. Aprés lecture dans le fichier???
    tu utilise quoi pour stocker tes mot??
    le fichier je l'ai ouvert en "a+" , et c'est le fichier ou je stock mes mots

    c'est un simple fichier text

    Pour contenaire trié il existe l'algo std::unique
    Sinon mieux il exist le contenaire std::map
    je vais jeté un oeil sur ces algo. merci pour votre aide

  6. #6
    Membre confirmé Avatar de scofild20
    Inscrit en
    Mars 2007
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 109
    Par défaut
    biensur il faut crée un nouveau fichier pour mettre les mots sans redondances

    car le c/c++ ne permet pas la suppression des lignes

  7. #7
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Par défaut
    Citation Envoyé par scofild20 Voir le message
    le fichier est déja trier.
    Citation Envoyé par scofild20 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    d
    d
    ab
    ab
    ad
    ad
    ab
    ab
    ba
    ba
    bc
    bc
    Citation Envoyé par scofild20 Voir le message
    je veux dire qu'il peut exister des redondances au milieu du fichier , pas naicessairement s'il est triée
    J'avoue avoir du mal a te comprendre.
    Tu nous dis que ton fichier est trié, tu nous montre un fichier pas trié, et enfin tu sors une phrase qui ne veux rien dire. Est-ce que tu t'en rends compte ?

    Désolé mais ce que tu cherches à faire est hyper simple, il s'agit d'une ouverture de fichier en lecture et une autre en ecriture en parallele, une boucle sur les lignes et un test.. Si tu ne vois pas avec les quelques indications que j'ai donné je ne sais pas ce que je peux faire de plus pour toi, à part te pondre le code ce que je me refuse à faire...

    C'est quand même le niveau zero de l'algorithmie là.

  8. #8
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par NiamorH Voir le message
    J'avoue avoir du mal a te comprendre.
    Tu nous dis que ton fichier est trié, tu nous montre un fichier pas trié, et enfin tu sors une phrase qui ne veux rien dire. Est-ce que tu t'en rends compte ?

    Désolé mais ce que tu cherches à faire est hyper simple, il s'agit d'une ouverture de fichier en lecture et une autre en ecriture en parallele, une boucle sur les lignes et un test.. Si tu ne vois pas avec les quelques indications que j'ai donné je ne sais pas ce que je peux faire de plus pour toi, à part te pondre le code ce que je me refuse à faire...

    C'est quand même le niveau zero de l'algorithmie là.
    si il y as des doublons dans un fichier non trié, t'as méthode ne marchera pas.... il restera des doublon
    Sauf si tu grade en mémoire les donné déjà lu. Ce qui reviens a faire une lecture et une réécriture

  9. #9
    Membre confirmé Avatar de scofild20
    Inscrit en
    Mars 2007
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 109
    Par défaut
    Désolé mais ce que tu cherches à faire est hyper simple, il s'agit d'une ouverture de fichier en lecture et une autre en ecriture en parallele, une boucle sur les lignes et un test.. Si tu ne vois pas avec les quelques indications que j'ai donné je ne sais pas ce que je peux faire de plus pour toi, à part te pondre le code ce que je me refuse à faire...
    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
     
    void supprimer_redondance(FILE *source, FILE *dest)
    {
         char *chaine,*chaine2;
         int existe=0;
         chaine=(char*)malloc(sizeof (char) * BUFSIZ);
         chaine2=(char*)malloc(sizeof (char) * BUFSIZ);
         rewind(source);
     
         while (fgets(chaine, BUFSIZ, source)!=NULL)
         {// on parcour le fichier source 
     
                existe=0;
                rewind(dest);//on place le pointeur du dest au débus après chaque tour while
               while(fgets(chaine2, BUFSIZ , dest)!= NULL ) 
                   if (strcmp(chaine, chaine2) ==0){ existe = 1;}
               // le pointeur dest va se placer au fin du fichier après le parcour
     
     
               if (existe==1) {  fputs(chaine, dest); }
     
     
     
     
     
         }
     
         free (chaine); free(chaine2);
     
     
    }
    il y as un problème dans la comparisation de chaine et chaine2

  10. #10
    Membre confirmé Avatar de scofild20
    Inscrit en
    Mars 2007
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 109
    Par défaut
    après vérification j'ai constater que mes fonction de générations des mots possibles ne sont pas efficaces

    exemple pour une chaine de caractère = "abcd"

    j'ai les mots possibles :
    abcd
    abdc
    adbc
    adcb
    abcd
    abdc
    badc
    bacd
    bcad
    bcda
    badc
    bacd
    cabd
    cadb
    cdab
    cdba
    cabd
    cadb
    badc
    bacd
    bcad
    bcda
    badc
    bacd

    alors par exemple que acbd manque !!

    voici la fonction que j'ai utilisé pour affichier tout les combinaisons possibles

    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
     
    void permuter(char ch[],int i,int j)
    { 
    int aux;
     
    aux=ch[i];
    ch[i]=ch[j];
    ch[j]=aux;
     
    }
     
    void combinaison(char ch[],int i, int n,FILE *f)
    {
    int j;
     
    if (i==n)
    {
     
    afficher(ch,n,f);
    }
    else
    for(j=i;j<n;j++)
    {
    permuter(ch,i,j);
    combinaison(ch,i+1,n,f);
    }
     
     
    }
    des commmentaires ??

  11. #11
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    alors pour ca tu as des algo
    std::prev_permutation et std::next_permutation
    http://r0d.developpez.com/articles/algos-stl/#LII-D-3

    Avec "abcd" j'en trouve 24 ce qui correspond bien à 4*3*2*1

    je te laisse regarder

    SInon permuter existe déja : std::swap

  12. #12
    Membre confirmé Avatar de scofild20
    Inscrit en
    Mars 2007
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 109
    Par défaut
    merci Mongaulois, je vais jetai un oeil sur ces algo

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

Discussions similaires

  1. probleme supprimer redondance dans un fichier
    Par Isabella83 dans le forum C
    Réponses: 5
    Dernier message: 06/02/2013, 11h07
  2. Controle de redondance dans un fichier txt en c++
    Par kabirou ousseini dans le forum C++
    Réponses: 3
    Dernier message: 27/04/2009, 22h44
  3. [Mysql] supprimer redondance dans réponse à une requête
    Par maverick56 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 24/05/2007, 14h29
  4. Supprimer ligne dans un fichier text
    Par Gad29 dans le forum Langage
    Réponses: 10
    Dernier message: 23/05/2007, 09h31
  5. Réponses: 3
    Dernier message: 20/09/2006, 11h05

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