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 :

Chercher et supprimer


Sujet :

C

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 8
    Par défaut Chercher et supprimer
    Bonjour a tous,

    J'ai ecit un code qui est sensé copier un txt en enlevant les ligne qui ont plus de 5 fois le même caracteres.
    Le fichier de sortie se creer mais rien ne s'écrit de dans je ne sais pas pourquoi.

    Voila le code:

    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
    #include <cstdlib>
    #include <iostream>
    #include <string>
    #include <stdio.h>
     
    using namespace std;
     
    int main(int argc, char *argv[])
    {
        //Variable
        FILE *file = NULL;
        FILE *file_clean = NULL;
        char ligne[256];
        char caractere;
        int suppr;
        char nom_clean;
     
        file=fopen(argv[1],"r+");
     
        if (file == NULL)
        {
                printf("[INFO]Echec de l'ouverture de %s\n\n",argv[1]);
                system("PAUSE");
                return 0;
        }
     
     
     
        file_clean=fopen("Dico_cleaned.txt","w");
     
        if (file_clean == NULL)
        {
                printf("[INFO]Echec de la creation de Dico_cleaned\n\n");
        }
     
        while (fgets(ligne,256,file) != NULL)
        {
     
              for ( int i=0;i<26;i++)
              {
                  caractere = ligne[i];
                  for ( int j=0;j<26;j++)
                  {
                       if (caractere==ligne[j])
                       {
                                suppr = suppr+1;              
                       }
                  }
     
                  if (suppr < 6 )
                  {
                       fprintf(file_clean,"%s\n",ligne);
                  }
              }
     
        }
     
        system("PAUSE");
        return EXIT_SUCCESS;
    }

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2009
    Messages : 110
    Par défaut
    Ton code :
    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
     
        while (fgets(ligne,256,file) != NULL)
        {
     
              for ( int i=0;i<26;i++)
              {
                  caractere = ligne[i];
                  for ( int j=0;j<26;j++)
                  {
                       if (caractere==ligne[j])
                       {
                                suppr = suppr+1;              
                       }
                  }
     
                  if (suppr < 6 )
                  {
                       fprintf(file_clean,"%s\n",ligne);
                  }
              }
     
        }
    Si je ne me trompe pas, tu stocke les 256 premiers caractères dans "ligne", et après tu vérifie tu vérifie s'il existe plus que 5 caractères semblables, tu supprimes ses 256 caractères.
    voilà les choses que j'aurais vérifié :

    * Si dans les 256 premiers caractères, j'ai 5 caractères qui se ressemblent. Dans ce cas c'est normal que tu as un fichier vide.

    * Le nombre de caractères pas ligne, pour voir si c'est effectivement 256 ou non.

    * Dans ton code, tu ne dépasse pas les 256 premiers caractères, dans à mon avis tu ne parcoure pas tout le texte.

    J'espère que ça va t'aider. Bon courage.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 8
    Par défaut
    Avec gets en théorie je prend tout les caractere possible jusqu'au \n donc il prend la ligne entiere

    puis la boucle while lui fais prendre la ligne d'apres

    mes lignes font 26 caractere

    je ne vois vraiment pas ce qui cloche
    merci quand meme de ton aide

  4. #4
    Membre émérite
    Inscrit en
    Juillet 2005
    Messages
    512
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 512
    Par défaut
    Ta variable suppr n'est jamais initialisée.
    ni au départ, ni quand tu change de lettre.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 8
    Par défaut
    A oui effectivement sa marche merci beaucoup

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 8
    Par défaut
    Ha un nouveau probleme: le fichier cleaned contient le fichier normal en 3 ou 4exemplaires et ecrit n'importe comment dans tous les sens

  7. #7
    Membre émérite
    Inscrit en
    Juillet 2005
    Messages
    512
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 512
    Par défaut
    Il faut fermer tes fichiers après utilisation !

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 8
    Par défaut
    Heu je les fermes

    j'ai remanier le code :

    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
    #include <cstdlib>
    #include <iostream>
    #include <string>
    #include <stdio.h>
     
    using namespace std;
     
    int main(int argc, char *argv[])
    {
        //Variable
        FILE *file = NULL;
        FILE *file_clean = NULL;
        char ligne[256];
        int suppr=0;
        char nom_clean;
        //Ouverture du fichier choisi
        file=fopen(argv[1],"r");
     
        if (file == NULL)
        {
                printf("[INFO]Echec de l'ouverture de %s\n\n",argv[1]);
                system("PAUSE");
                return 0;
        }
        //creation du fichier clean
        file_clean=fopen("Dico_cleaned.txt","w+");
     
        if (file_clean == NULL)
        {
                printf("[INFO]Echec de la creation de Dico_cleaned\n\n");
                system("PAUSE");
                return 0;
        }
     
        while (fgets(ligne,256,file) != NULL)
        {
              for ( int i=0;i<26;i++)
              {
                  suppr = 0;
     
                  for ( int j=0;j<26;j++)
                  {
                       if (ligne[i]==ligne[j])
                       {
                                suppr = suppr+1;              
                       }
                  }
     
                  if (suppr < 6)
                  {
                       fprintf(file_clean,"%s",ligne);
                       printf("%s",ligne);   
                  }
              }
     
        }
        fclose(file_clean);
        fclose(file);
     
        system("PAUSE");
        return EXIT_SUCCESS;
    }

  9. #9
    Membre Expert
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Par défaut
    Ou alors utiliser des structures C++, ici notamment fstream . Qui t'éviterais bien des désagréments.

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 50
    Par défaut
    Je pense que cela provient de l'ouverture du fichier en écriture "w+"

    met simplement "w" sa devrait passé car w+ te met en mode mise a jour dc ça parait logique que sa fasse n'imorte quoi ...

  11. #11
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Ceci est du code C. Tu trouveras de l'aide plus pertinente dans le forum C.
    Si tu souhaites le faire en C++, alors consulte les entrées sur les flux, essaies avec et revient sur le forum C++ si tu n'y arrives pas

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 8
    Par défaut
    C'est bon j'ai fais comme sa
    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
     
    int main(int argc, char *argv[2], int Nbre)
    {
        FILE *file = NULL;
        FILE *file_clean = NULL;
        char ligne[256];
        char caractere;
        int suppr;
        bool write;
     
        file=fopen(argv[1],"r+");
     
        if (file == NULL)
        {
                printf("[INFO]Echec de l'ouverture de %s\n\n",argv[1]);
                system("PAUSE");
                return 0;
        }
     
     
     
        file_clean=fopen("Dico_cleaned.txt","w");
     
        if (file_clean == NULL)
        {
                printf("[INFO]Echec de la creation de Dico_cleaned\n\n");
        }
     
        while (fgets(ligne,256,file) != NULL)
        {
              write=true;
              for ( int i=0;i<26;i++)
              {
                  suppr=0;
                  caractere = ligne[i];
                  for ( int j=0;j<26;j++)
                  {
                       if (caractere==ligne[j])
                       {
                                suppr = suppr+1;
                       }
                  }
     
                  if (suppr > 6 )
                  {
                      write=false;
                  }
              }
              if (write)
              {
              fprintf(file_clean,"%s",ligne);
              }    
        }
     
        fclose(file);
        fclose(file_clean);
        return EXIT_SUCCESS;
    }

  13. #13
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    file=fopen(argv[1],"r+");
    Il n'y a aucune raison d'ouvrir le fichier en "r+", le mode "r" convient.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for ( int j=0;j<26;j++)...
    pourquoi partir de 0 ? les caractères d'indice inférieurs à i+1 ont déja été analysés.
    Pourquoi 26 (alors que le tableau de stockage fait 256) ? La fin de la chaîne est aisément détectable par la présence du '\0' ou du '\n'

    Pourquoi continuer à analyser la ligne si write == false ? On sait déjà qu'elle va être éliminée.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
              write=true;
              for ( int i=0;ligne[i] != '\0' && write;i++)
              {
                  suppr=0;
                  caractere = ligne[i];
                  for ( int j = i+1 ; ligne[j] != '\0' && write ; j++)
                  {
                       if (caractere==ligne[j])
                       {
                                suppr = suppr+1;
                                write =  suppr <= 6 ; 
                      }
                  }
              }
    (Code non testé)

Discussions similaires

  1. [Virtual Pascal] Chercher et supprimer un dossier
    Par Roland Chastain dans le forum Autres IDE
    Réponses: 9
    Dernier message: 04/04/2014, 23h50
  2. Réponses: 1
    Dernier message: 02/01/2014, 18h10
  3. [XL-2007] Chercher et supprimer du texte dans cellule
    Par louqui dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 08/04/2012, 16h53
  4. [XL-2007] Chercher dans une feuille et supprimer
    Par 0916paps dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 20/10/2010, 22h12
  5. Excel, chercher une valeur à supprimer?
    Par Zantetsu dans le forum Excel
    Réponses: 2
    Dernier message: 25/04/2009, 14h16

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