rosco91
Messages postés20Date d'inscriptionmardi 22 mai 2007StatutMembreDernière intervention 4 juin 2007
-
22 mai 2007 à 14:46
rosco91
Messages postés20Date d'inscriptionmardi 22 mai 2007StatutMembreDernière intervention 4 juin 2007
-
30 mai 2007 à 08:58
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.
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;
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
rosco91
Messages postés20Date d'inscriptionmardi 22 mai 2007StatutMembreDernière intervention 4 juin 2007 24 mai 2007 à 08:35
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.
cs_Matt67
Messages postés549Date d'inscriptionsamedi 6 septembre 2003StatutMembreDernière intervention 6 mars 20103 24 mai 2007 à 22:44
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...
rosco91
Messages postés20Date d'inscriptionmardi 22 mai 2007StatutMembreDernière intervention 4 juin 2007 25 mai 2007 à 09:20
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.
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++;
}
//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();
}
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_Matt67
Messages postés549Date d'inscriptionsamedi 6 septembre 2003StatutMembreDernière intervention 6 mars 20103 29 mai 2007 à 21:23
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.
rosco91
Messages postés20Date d'inscriptionmardi 22 mai 2007StatutMembreDernière intervention 4 juin 2007 30 mai 2007 à 08:58
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.