Rechercher et supprimer [Résolu]

Signaler
Messages postés
6
Date d'inscription
mardi 12 mai 2009
Statut
Membre
Dernière intervention
24 juin 2009
-
Messages postés
6
Date d'inscription
mardi 12 mai 2009
Statut
Membre
Dernière intervention
24 juin 2009
-
Bonjour a tous,
Alors je commence en C++ et je voudrais savoir comment je peux faire un programme qui lit un .txt ligne par ligne et qui la supprime si elle contient plus de x fois un caractere

en esperant que quelqu'un pourra m'aider.

8 réponses

Messages postés
276
Date d'inscription
lundi 8 septembre 2008
Statut
Membre
Dernière intervention
15 avril 2013
2
Attention aux tests !!

if(write=true) est toujours vrai, il faut écrire if(write==true) ou plus simplement if(write)
Messages postés
6
Date d'inscription
mardi 12 mai 2009
Statut
Membre
Dernière intervention
24 juin 2009

J'ai trouver comment faire mais par-contre sa ne marche pas si quelqu'un pourrait m'aider.

Voila le code :

#include <cstdlib>
#include
#include <string>
#include <stdio.h>



using namespace std;



int main(int argc, char *argv[])
{
    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;
}
Messages postés
276
Date d'inscription
lundi 8 septembre 2008
Statut
Membre
Dernière intervention
15 avril 2013
2
Bonjour,

- suppr n'est jamais initailisé, il faut le remettre à 0 à chaque ligne si tu veux compter le nombre de caractères identiques par ligne.

- pour un test, tu ne dois pas écrire if(caractere=ligne[j]) mais if(caractere==ligne[j])

- je suppose que tu es certain que toutes tes lignes font exactement 26 caractères
Messages postés
6
Date d'inscription
mardi 12 mai 2009
Statut
Membre
Dernière intervention
24 juin 2009

Effectivement sa marche mieux mais par-contre sa ecrit dans dico_cleaned dans tous les sens et n'importe comment alors que dans le fichier iniatiale c'est bien ordonné

PS:Oui les ligne font 26 caracteres
Messages postés
276
Date d'inscription
lundi 8 septembre 2008
Statut
Membre
Dernière intervention
15 avril 2013
2
Peut-être est-ce parce que tu ne fermes pas les fichiers en sortant

fclose(file);
fclose(file_clean);
Messages postés
6
Date d'inscription
mardi 12 mai 2009
Statut
Membre
Dernière intervention
24 juin 2009

Sa y est sa marche mieu sauf que j'ai un autre probleme c'est que lorsque
Test.txt contient :

ABCDEFGHIJKLMNOPQRSTUVWXYZ

Dico_cleaned.txt contient :

ABCDEFGHIJKLMNOPQRSTUVWXYZ
ABCDEFGHIJKLMNOPQRSTUVWXYZ
ABCDEFGHIJKLMNOPQRSTUVWXYZ
ABCDEFGHIJKLMNOPQRSTUVWXYZ
ABCDEFGHIJKLMNOPQRSTUVWXYZ

En faite le code multiplie par 5 le texte ...
Messages postés
6
Date d'inscription
mardi 12 mai 2009
Statut
Membre
Dernière intervention
24 juin 2009

J'ai trouvé une solution voila le nouveau code :

#include <cstdlib>
#include
#include <string>
#include <stdio.h>


using namespace std;


int main(int argc, char *argv[])
{
    FILE *file = NULL;
    FILE *file_clean = NULL;
    char ligne[256];
    char caractere;
    int suppr;
    char nom_clean;
    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=true)
          {
          fprintf(file_clean,"%s",ligne);
          }   
    }
   
    fclose(file);
    fclose(file_clean);
   
    system("PAUSE");
    return EXIT_SUCCESS;
}

Par contre il ne detecte pas les lignes qui ont plus de 6 caractere identique
Messages postés
6
Date d'inscription
mardi 12 mai 2009
Statut
Membre
Dernière intervention
24 juin 2009

Sa marche

Merci beaucoup de ton aide