Programme en C

[Résolu]
Signaler
Messages postés
20
Date d'inscription
mardi 22 mai 2007
Statut
Membre
Dernière intervention
4 juin 2007
-
Messages postés
20
Date d'inscription
mardi 22 mai 2007
Statut
Membre
Dernière intervention
4 juin 2007
-
bonjour, cela fait deux jour que je cherche un programme qui me permettra de lire plusieur fichiers textes existants dans un dossier. J'ai un programme mais qui lit un seul fichier texte dans le dossier, ensuite je lis le fichier trouvé, puis en fonction de ce qu'il y a écrit, je réécris dans un autre fichier texte soit oui ou soit non.

#include <stdio.h>
#include <string.h>
#include<conio.h>
#include <stdlib.h>

FILE* lefichier1;
char mot[100]="Application terminee avec succes",file_t[150]="C:/yoyo/fichier1.txt",newtext[10000];

//Fonction d'entrée du mot recherché
int mot_recherche()
{
printf("%c",mot);


return 0;
}


//Fonction d'entrée du chemin du fichier
int file_c()
{
printf("> Le chemin d'acces du fichier texte dans C:/ \n",file_t);


return 0;
}


//Fonction principale
main()
{
FILE* lefichier1;
FILE *file;
char s_read[100];
int l_mot=0,l_file=0,ref=0,t,b,n,decal=0;


//Entrée du chemin du fichier
file_c();


 //Chemin du fichier trop long
 if(strlen(file_t)>150)
 {
 puts("\n> Chemin du fichier trop long : ERREUR");
 puts("> Appuyez sur une touche pour continuer...");
 getch();
 main();
 }


//Ouverture en BINAIRE
file=fopen(file_t,"rb");
 //Erreur d'ouverture
 if (file==NULL)
 {
 puts("\n> Impossible d'ouvrir le fichier : ERREUR");
 puts("> Appuyez sur une touche pour continuer...");
 getch();
 //On relance alors la fonction principale
 main();
 }
 //Si l'ouverture a réussi
 else
 {
  //Il s'agit ici de compter combien d'octets contient le fichier
  //Un caractère étant codé sur 1 octet on aura donc le nombre de caractères du fichier
  //Le pointeur est initialement au début du fichier
  //Tant que l'on atteint pas la fin du fichier,
  //On place dans n un bloc du fichier de la taille d'un entier et on incrémente l_file
  //Le pointeur avance ainsi à chaque tour de la taille d'un entier (4 octets)
  //Il faudra donc multiplier l_file par 4 pour avoir le nombre d'octets et non de groupes de 4 octets
  while(!feof(file))
  {
  n=getw(file);
  l_file++;
  }
  //On multiplie par 4 pour obtenir le nombre d'octets
  l_file=l_file*4;
  //On ferme
  fclose(file);
  //Ouverture en ASCII
  file=fopen(file_t,"r");
  printf ("> Fichier trouv%c (%d caract%cres) : OK",130,l_file,138);
 }


//Entrée du mot recherché
mot_recherche();
//Longueur du mot
l_mot=strlen(mot);
//Erreur si la longueur du mot est nulle
 if ((!l_mot)||(l_mot>100))
 {
 puts("\n> Mot incorrect (longueur nulle ou > 100) : ERREUR");
 puts("> Appuyez sur une touche pour continuer...");
 getch();
 main();
 }


 for (t=0;t<=(l_file-l_mot);t++)
 {
 //On place le pointeur à la position t (initialement nulle puis incrémentée)
 fseek(file,t,0);
 //On récupère l_mot caractères à partir de cette position
 //(autant de caractères que de caractères dans le mot)
 //Attention, le deuxième argument est 'l_mot+1' pour récupérer l_mot caractères !
 fgets(s_read,l_mot+1,file);
  //Si les chaînes mot et s_read sont identiques
  if(!(strcmp(s_read,mot)))
  {
  //On incrémente alors ref (qui contient le nombre de chaînes identiques trouvées)
  ref++;
  //Dans newtext, on place un symbole spécial juste avant le mot
  //Le pointeur de newtext sera en avance sur le pointeur de file à cause de ce symbole
  //C'est pourquoi on compense celà par l'entier decal incrémenté à chaque introduction du caractère spécial
  //*(newtext+t+decal)=2; -> caractère de code ASCII = 2
  *(newtext+t+decal)=2;
   //On place après le symbole spécial un par un les caractères de s_read dans newtext
   for (b=0;b<l_mot;b++)
   {
   *(newtext+t+decal+1+b)=*(s_read+b);
    }  
   decal=decal+1;
                
lefichier1=fopen  ("lefichier1.txt", "a+");
                 fprintf(lefichier1,"---------------------------------\n");
                 fprintf(lefichier1,"Lecture des fichiers logs\n");
                 fprintf(lefichier1,"Module imp/Exp Art\n");
                 fprintf(lefichier1,"---------------------------------\n");
                 fprintf (lefichier1,"%s OUI\n");
                 fflush(lefichier1);
                 fclose(lefichier1);
                        
system("start lefichier1.txt");  
                       
    return 0;         
    }
   else
  {
   //Si les chaînes sont diffèrentes, on recopie dans newtext
   //Et celà sans incrémenter decal !
   for (b=0;b<l_mot;b++)
   {
   *(newtext+t+decal+b)=*(s_read+b);
   }
 }
}


lefichier1=fopen  ("lefichier1.txt", "a+");
                 fprintf(lefichier1,"--------------------------------\n");
                 fprintf(lefichier1,"Lecture des fichiers logs\n");
                 fprintf(lefichier1,"Module imp/Exp Art\n");
                 fprintf(lefichier1,"--------------------------------\n");
                 fprintf (lefichier1,"%s NON \n");
                 fflush(lefichier1);
                 fclose(lefichier1);
                
system("start lefichier1.txt");
getch();
}

Si quelqu' un connait mon problème, je suis peneur.
Merci

7 réponses

Messages postés
549
Date d'inscription
samedi 6 septembre 2003
Statut
Membre
Dernière intervention
6 mars 2010

Bonsoir,

Essaye de poster une source qui compile parce que là, y a du boulot...

Matt...
Messages postés
20
Date d'inscription
mardi 22 mai 2007
Statut
Membre
Dernière intervention
4 juin 2007

mon programme se compile trés bien!!!
il faut faire attention à chaque paramètre: le nom du dossier et du fichier.
Parce que mon source fonctionne trés bien.
Messages postés
549
Date d'inscription
samedi 6 septembre 2003
Statut
Membre
Dernière intervention
6 mars 2010

Bonsoir,

Déja include <conio.h>, je ne connais pas, cela sert a quoi ?
donc je le vire et pour les getch, je mets getchar à la place (standard)

puis pour les lignes suivantes, mon compilateur tousse :
printf("> Le chemin d'acces du fichier texte dans C:/ \n",file_t);
main()
fprintf (lefichier1,"%s OUI\n");

et quand je vois que tu fais appel au main(), là c'est moi qui tousse...
et plein d'autre chose.
Comment tu fais pour recuperer le chemin du fichier recherché ainsi que le mot ?
je maintiens, y a du boulot...

Matt...
Messages postés
20
Date d'inscription
mardi 22 mai 2007
Statut
Membre
Dernière intervention
4 juin 2007

Voici mon programme arrangé, mais je ne comprends pas pourquoi il ne distingue plus les phrases lorsqu'il va les lire dans leur fichier. [getch ();] me sert à maintenir l'écran DOS. Je pense que mon problème vient du faite j'ai mélangé du C et du C++. Je sais pas si cela est possible?!!
maintenant j'aimerais savoir ce que tu en penses Matt67.
 
#include <stdio.h>
#include <string.h>
#include<conio.h>
#include <stdlib.h>
#include<time.h>
#include
#include <fstream>
#include <string>


using namespace std ;


#define TAILLE_BUFFER 200




FILE* lefichier1;
char mot[100]="Application terminee avec succes",file_t[150]="C:/Adresses.txt",newtext[10000];
char ligne;


//Fonction d'entrée du mot recherché
int mot_recherche()
{
return 0;
}


//Fonction d'entrée du chemin du fichier
int file_c()
{
return 0;
}


//Fonction d'entrée du chemin du fichier1
int file_c1()
{
return 0;
}


//Fonction principale
main()
{
  FILE* lefichier1;
  FILE *file;
  FILE *file1;
  char s_read[100];
  int l_mot=0,l_file=0,l_file1=0,ref=0,t,b,n,decal=0;




  //Entrée du chemin du fichier
  file_c();


  //Ouverture en BINAIRE
  file=fopen(file_t,"rb");
  //Erreur d'ouverture
     if (file==NULL)
     {
       printf("\n> Impossible d'ouvrir le fichier : ERREUR");
       getch();
     }
      //Si l'ouverture a réussi
   else
     {
          //Il s'agit ici de compter combien d'octets contient le fichier
          //Un caractère étant codé sur 1 octet on aura donc le nombre de caractères du fichier
           //Le pointeur est initialement au début du fichier
          //Tant que l'on atteint pas la fin du fichier,
          //On place dans n un bloc du fichier de la taille d'un entier et on incrémente l_file
          //Le pointeur avance ainsi à chaque tour de la taille d'un entier (4 octets)
          //Il faudra donc multiplier l_file par 4 pour avoir le nombre d'octets et non de groupes de 4 octets
         while(!feof(file))
          {
            n=getw(file);
            l_file++;
           }
 
             //Ouverture en ASCII
             file=fopen(file_t,"r");
             printf ("> Fichier Adresse.txt trouver \n ");
             fclose(file);
             getch();
      }


///////////////////////////////////////////////////////////////////////////////
            char ligne[TAILLE_BUFFER + 2];
            fstream MonFic (file_t);
              if (! MonFic.is_open())
               {
              cout << "impossible d'ouvrir le fichier"  << endl;
                 return 1;
               }
                while (! MonFic.eof())
                 { 
              MonFic.getline (ligne, TAILLE_BUFFER + 2);
                 int len = strlen(ligne);
  
//////////////////////////////////////////////////////////////////////////////
  
                    file_c1();
                      file1=fopen(ligne,"r");
                       if (file1==NULL)
                        {
                          printf("\n> Impossible d'ouvrir %s ",ligne);
                          getchar();
                        }
                       else
                        {
                          while(!feof(file1))
                            {
                              n=getw(file1);
                               l_file1++;
                            }
                               file1=fopen(ligne,"r");
                               printf ("> Fichier trouv%c (%d caract%cres) : OK",130,l_file1,138);
                               printf ("> COUCOU \n ");
              
///////////////////////////////////////////////////////////////////////////////  


                                  //Entrée du mot recherché
                               mot_recherche();
                                   //Longueur du mot
                               l_mot=strlen(mot);  
  
                               for (t=0;t<=(l_file-l_mot);t++)
                                {
                                       //On place le pointeur à la position t (initialement nulle puis incrémentée)
                                  fseek(file1,t,0);
                                       //On récupère l_mot caractères à partir de cette position
                                       //(autant de caractères que de caractères dans le mot)
                                       //Attention, le deuxième argument est 'l_mot+1' pour récupérer l_mot caractères !
                                  fgets(s_read,l_mot+1,file);
                                      //Si les chaînes mot et s_read sont identiques
                                    if(!(strcmp(s_read,mot)))
                                    {
                                         //On incrémente alors ref (qui contient le nombre de chaînes identiques trouvées)
                                      ref++;
                                         //Dans newtext, on place un symbole spécial juste avant le mot
                                         //Le pointeur de newtext sera en avance sur le pointeur de file à cause de ce symbole
                                         //C'est pourquoi on compense celà par l'entier decal incrémenté à chaque introduction du caractère spécial
                                         //*(newtext+t+decal)=2; -> caractère de code ASCII = 2
                                      *(newtext+t+decal)=2;
                                          //On place après le symbole spécial un par un les caractères de s_read dans newtext
                                         for (b=0;b<l_mot;b++)
                                          {
                                            *(newtext+t+decal+1+b)=*(s_read+b);
                                          }  
                                           decal=decal+1;
 
                                           time_t temps_act;
                                           time(&temps_act);  
                                           lefichier1=fopen  ("lefichier1.txt", "a+");  //création d'un fichier txt nommé lefchier1
                                           fprintf(lefichier1,"\n-------------------------\n"); //ce qu'il y a écrit dans le fichier txt
                                           fprintf(lefichier1,"Module imp/Exp Art\n");
                                           fprintf(lefichier1,"-------------------------\n");
                                           fprintf (lefichier1,"%s = OUI %s \n",ligne,ctime(&temps_act));
                                           fflush(lefichier1);
                                           fclose(lefichier1);
                                           system ("cls");
                                           system("start lefichier1.txt"); //ouverture automatique du fichier txt
                                           return 0;         
                                    }
                                  else
                                   {
                                         //Si les chaînes sont diffèrentes, on recopie dans newtext
                                         //Et celà sans incrémenter decal !
                                      for (b=0;b<l_mot;b++)
                                       {
                                         *(newtext+t+decal+b)=*(s_read+b);
                                       }
                                   }
                            }
                     }    


                                       time_t temps_act;
                                       time(&temps_act);
                                       lefichier1=fopen  ("lefichier1.txt", "a+");  //création d'un fichier txt nommé lefchier1
                                       fprintf(lefichier1,"\n------------------------\n");//ce qu'il y a écrit dans le fichier txt
                                       fprintf(lefichier1,"Module imp/Exp Art\n");
                                       fprintf(lefichier1,"----------------------\n");
                                       fprintf (lefichier1,"%s = NON  %s \n",ligne,ctime(&temps_act));
                                       fflush(lefichier1);
                                       fclose(lefichier1);
                                       system ("cls");               
                                       system("start lefichier1.txt");//ouverture automatique du fichier txt
                                       fclose(file1);


          }
getch();
}


 


 
Messages postés
549
Date d'inscription
samedi 6 septembre 2003
Statut
Membre
Dernière intervention
6 mars 2010

Bonsoir,

Effectivement, soit tu fais du c, soit du c++, faut choisir...

Tu veux faire quoi exactement, tu as un mot et tu veux savoir combien il y a occurence de ce mot dans un fichier ? et ecrire, je ne sais quoi dans un deuxieme fichier.
Quelle est la taille de tes fichiers en entrée (environ) ?

Essaye d'expliquer en bon français ce que tu veux faire.

Matt...
Messages postés
20
Date d'inscription
mardi 22 mai 2007
Statut
Membre
Dernière intervention
4 juin 2007

Oui en effet il faut choisir entre le C et le C ++. Mais maintenant j'ai plus de problème mon programme fonctionne à présent. Tiens le voici :

#include <stdio.h>
#include <string.h>
#include<conio.h>
#include <stdlib.h> // atoi
#include
#include <fstream>
using namespace std ;
#define TAILLE_BUFFER 200


 main()//Fonction principale
{
   
    char mot[150]="Application terminée avec succès",file_t[150]="C:/Adresses.txt",newtext[100];
    char ligne[TAILLE_BUFFER + 1];
    FILE* file;
    FILE* lefichier1;
    FILE* file1;
    char s_read[100];
    int l_mot=0,l_file=0,l_file1=500,ref=0,t,b=0,n,decal=0;
      
lefichier1=fopen ("lefichier1.txt", "a+");//création d'un fichier txt nommé lefchier1   
   
  file=fopen(file_t,"rb");//Ouverture en BINAIRE
 if (file==NULL) //Erreur d'ouverture
 {
 puts("\n> Impossible d'ouvrir le fichier : ERREUR");
 getch();
 }
 else //Si l'ouverture a réussi
 {
   while(!feof(file))
   {
     n=getw(file);
     l_file++;
   }
    fclose(file); //On ferme
    file=fopen(file_t,"r");//Ouverture en ASCII
    fclose(file);
 }
            fstream MonFic (file_t);
              if (! MonFic.is_open())
               {
              cout << "impossible d'ouvrir le fichier"  << endl;
                 return 1;
               }
                while (! MonFic.eof())
                 { 
              MonFic.getline (ligne, TAILLE_BUFFER + 1);
                 int len = strlen(ligne);                                   
                      file1=fopen(ligne,"r");//Ouverture en BINAIRE                    
                       if (file1==NULL)
                        {
                          printf("\n> Impossible d'ouvrir %s ",ligne);
                          getch();
                         
                        }
                       else
                        {                               
                          while(!feof(file1))
                           {               
                             n=getw(file1);
                             l_file1++;
                            }                             
                               fclose(file1);
                               file1=fopen(ligne,"r");
                               printf ("\n> Fichier %s ",ligne);
                               fprintf(lefichier1,"\n\n> Fichier %s ",ligne);
                               l_mot=strlen(mot);//Longueur du mot
                                for (t=0;t<=(l_file1-l_mot);t++)
                                 {
                                    fseek(file1,t,0);
                                     fgets(s_read,l_mot+1,file1);
                                       if(!(strcmp(s_read,mot)))
                                       {
                                          ref++;                  
                                          decal=decal+1;
                                          printf("=OUI");
                                           fprintf(lefichier1,"=OUI");
                                           fflush(lefichier1);     
                                      }                            
                                 }
                           }                                                                              
                   }   
fclose(file1);
fclose(lefichier1);
system("start lefichier1.txt");//ouverture automatique du fichier txt
getch();
}
Messages postés
20
Date d'inscription
mardi 22 mai 2007
Statut
Membre
Dernière intervention
4 juin 2007

Maintenant j'aimerai savoir si c'est possible d'afficher la date de modification ou de création d'un fichier texte en C ou C++ ?? Je sais que l'on peut afficher la date et l'heure du système.