Petite aide en C
heroux67
Messages postés
21
Date d'inscription
Statut
Membre
Dernière intervention
-
oupsman Messages postés 316 Date d'inscription Statut Membre Dernière intervention -
oupsman Messages postés 316 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Voila, j'ai un problème dans un programme en C.
J'ai trois fichiers :
Un fichier nommé " test1" ( contient une ligne ou est marqué: " un " )
Un second nommé "test2" ( contient pareil que le fichier 1 )
Un troisième nommé "test3" vierge.
Je souhaite comparer les lignes 1 des fichiers 1 et 2 et, si elles sont identiques, mettre la ligne 1 du fichier 2 dans le document 3.
Voici mon code :
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <cstring>
#define TAILLE_MAX 1000 // Tableau de taille 1000
int main(int argc, char *argv[])
{
int i = 1;
FILE* fichier1 = NULL;
FILE* fichier2 = NULL;
FILE* fichier3 = NULL;
char chaine1[TAILLE_MAX] = ""; // Chaîne vide de taille TAILLE_MAX
char chaine2[TAILLE_MAX] = ""; // Chaîne vide de taille TAILLE_MAX
char chaine3[TAILLE_MAX] = ""; // Chaîne vide de taille TAILLE_MAX
fichier1 = fopen("test1.txt", "r+");
fichier2 = fopen("test2.txt", "r+");
fichier3 = fopen("test3.txt", "r+");
if (fichier1 != NULL)
{
printf("fichier1 ouvert\n");
if (fichier2 != NULL)
{
if (fichier3 != NULL)
{
printf("fichier2 ouvert \n\n");
fgets(chaine1, TAILLE_MAX, fichier1); // On lit maximum TAILLE_MAX caractères du fichier1, on stocke le tout dans "chaine1"
printf("Ligne %d du fichier 1 : %s\n", i,chaine1); // On affiche la chaîne1
fgets(chaine2, TAILLE_MAX, fichier2); // On lit maximum TAILLE_MAX caractères du fichier2, on stocke le tout dans "chaine2"
printf("ligne %d du fichier 2 : %s\n\n", i,chaine2); // On affiche la chaîne2
if (strcmp(chaine1,chaine2) == 0)
{
printf("Chaine1 = Chaine2 \n\n");
fprintf(fichier3, "%s", chaine2);
fgets(chaine3, TAILLE_MAX, fichier3); // On lit maximum TAILLE_MAX caractères du fichier3, on stocke le tout dans "chaine3"
printf("ligne %d du fichier 3 : %s\n\n", i,chaine3); // On affiche la chaîne3
getchar();
}
else //if ((strcmp(chaine1,chaine2) < 0)
{
printf("Chaine1 != Chaine2\n\n");
}
i++;
getchar();
fclose(fichier1);
fclose(fichier2);
fclose(fichier3);
}
}
}
return 0;
}
Tout marche, les fichiers sont ouverts, on les lit, on les compare.
Mais le soucis, est que je n'arrive pas a copier la ligne 1 du fichier 2 dans le fichier 3 comme voulu..
De plus, comment faire pour lire plusieurs lignes dans les fichiers ?
Qui pourrais m'aider car je ne trouve pas ce qui ne vas pas..
Merci a vous.
Voila, j'ai un problème dans un programme en C.
J'ai trois fichiers :
Un fichier nommé " test1" ( contient une ligne ou est marqué: " un " )
Un second nommé "test2" ( contient pareil que le fichier 1 )
Un troisième nommé "test3" vierge.
Je souhaite comparer les lignes 1 des fichiers 1 et 2 et, si elles sont identiques, mettre la ligne 1 du fichier 2 dans le document 3.
Voici mon code :
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <cstring>
#define TAILLE_MAX 1000 // Tableau de taille 1000
int main(int argc, char *argv[])
{
int i = 1;
FILE* fichier1 = NULL;
FILE* fichier2 = NULL;
FILE* fichier3 = NULL;
char chaine1[TAILLE_MAX] = ""; // Chaîne vide de taille TAILLE_MAX
char chaine2[TAILLE_MAX] = ""; // Chaîne vide de taille TAILLE_MAX
char chaine3[TAILLE_MAX] = ""; // Chaîne vide de taille TAILLE_MAX
fichier1 = fopen("test1.txt", "r+");
fichier2 = fopen("test2.txt", "r+");
fichier3 = fopen("test3.txt", "r+");
if (fichier1 != NULL)
{
printf("fichier1 ouvert\n");
if (fichier2 != NULL)
{
if (fichier3 != NULL)
{
printf("fichier2 ouvert \n\n");
fgets(chaine1, TAILLE_MAX, fichier1); // On lit maximum TAILLE_MAX caractères du fichier1, on stocke le tout dans "chaine1"
printf("Ligne %d du fichier 1 : %s\n", i,chaine1); // On affiche la chaîne1
fgets(chaine2, TAILLE_MAX, fichier2); // On lit maximum TAILLE_MAX caractères du fichier2, on stocke le tout dans "chaine2"
printf("ligne %d du fichier 2 : %s\n\n", i,chaine2); // On affiche la chaîne2
if (strcmp(chaine1,chaine2) == 0)
{
printf("Chaine1 = Chaine2 \n\n");
fprintf(fichier3, "%s", chaine2);
fgets(chaine3, TAILLE_MAX, fichier3); // On lit maximum TAILLE_MAX caractères du fichier3, on stocke le tout dans "chaine3"
printf("ligne %d du fichier 3 : %s\n\n", i,chaine3); // On affiche la chaîne3
getchar();
}
else //if ((strcmp(chaine1,chaine2) < 0)
{
printf("Chaine1 != Chaine2\n\n");
}
i++;
getchar();
fclose(fichier1);
fclose(fichier2);
fclose(fichier3);
}
}
}
return 0;
}
Tout marche, les fichiers sont ouverts, on les lit, on les compare.
Mais le soucis, est que je n'arrive pas a copier la ligne 1 du fichier 2 dans le fichier 3 comme voulu..
De plus, comment faire pour lire plusieurs lignes dans les fichiers ?
Qui pourrais m'aider car je ne trouve pas ce qui ne vas pas..
Merci a vous.
A voir également:
- Petite aide en C
- Petite amie virtuelle en français gratuit - Accueil - Intelligence artificielle
- Petite croix snap - Forum Snapchat
- Petite cle en haut a droite samsung - Forum Samsung
- Apparition d'une clé d'entretien sur écran samsung s5 > sm-g800F ✓ - Forum Samsung
- Petite majuscule word ✓ - Forum Word
30 réponses
WAIIIII BRAVO TU ASSURES :D
Ton pti code à marché :DD
Une dernière question si vous avez le temps, comment faire pour lire une seconde ligne ?
un tableau avec [i][j] ?
Merci Merci :D
Ton pti code à marché :DD
Une dernière question si vous avez le temps, comment faire pour lire une seconde ligne ?
un tableau avec [i][j] ?
Merci Merci :D
non un tableau a une dimension suffit mais il faudrait faire une boucle si tu veut comparer chaque ligne des deux fichiers
Hum..
Quelque chose du genre :
for ( i=0; i<NB_LIGNES;i++)
{
//traitemement
}
?
Mais je ne comprend pas comment cela permet de changer de ligne =/
Quelque chose du genre :
for ( i=0; i<NB_LIGNES;i++)
{
//traitemement
}
?
Mais je ne comprend pas comment cela permet de changer de ligne =/
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
ben c'est un curseur qui se deplace sur chaque caractere de ton fichier donc sa position avance au fur et a mesure que tu lis dedans quand il arrive au caractere '\n' de fin de ligne il passe a la ligne suivante tout seul
Yeahh
je vois des réponses comme celles de mc auquelles je n'ai pas répondu :x
Apparement elles se sont pas affichées correctement =/
mc :
Si je comprends bien ton probleme est le suivant
fprintf(fichier3, "%s", chaine2); => ecrit dans le fichier
fgets(chaine3, TAILLE_MAX, fichier3); => lit dans ce meme fichier
printf("ligne %d du fichier 3 : %s\n\n", i,chaine3); => affiche ce qui vient d'etre lu
Et BAM! rien n'a été ecrit à l'écran..... c'est normal docteur! il faut imaginer le fichier comme une bande sur laquelle on dispose un curseur. A l'ouverture, ce curseur est au debut du fichier. Lors de l'ecriture il avance et se retrouve donc a la fin des choses que tu viens d'ecrire. Ensuite la lecture intervient, mais ou est le curseur? a la fin, donc il n'y a rien a lire, donc aucun affichage. Si j'etais toi, je verifierais si rien ne se trouve dans le fichier (en l'ouvrant a la main, et en verifiant a l'oeuil). Normalement les donnees doivent etre la.
merci pour ton aide :)
je vois des réponses comme celles de mc auquelles je n'ai pas répondu :x
Apparement elles se sont pas affichées correctement =/
mc :
Si je comprends bien ton probleme est le suivant
fprintf(fichier3, "%s", chaine2); => ecrit dans le fichier
fgets(chaine3, TAILLE_MAX, fichier3); => lit dans ce meme fichier
printf("ligne %d du fichier 3 : %s\n\n", i,chaine3); => affiche ce qui vient d'etre lu
Et BAM! rien n'a été ecrit à l'écran..... c'est normal docteur! il faut imaginer le fichier comme une bande sur laquelle on dispose un curseur. A l'ouverture, ce curseur est au debut du fichier. Lors de l'ecriture il avance et se retrouve donc a la fin des choses que tu viens d'ecrire. Ensuite la lecture intervient, mais ou est le curseur? a la fin, donc il n'y a rien a lire, donc aucun affichage. Si j'etais toi, je verifierais si rien ne se trouve dans le fichier (en l'ouvrant a la main, et en verifiant a l'oeuil). Normalement les donnees doivent etre la.
merci pour ton aide :)
hum.. ba au final je n'ai pas réussi a lire plus d'une ligne =/
merci de votre aide :D
merci de votre aide :D
En fait, si je comprend bien ton problème, tu veux comparer ligne par ligne les trois fichiers.
Je ne sais pas comment est-ce que tu l'as codé mais si j'étais à ta place voici mon algo :
primo je défini la fonction int CompareLigne(char * ligne1, char * ligne2);
cette fonction renvoi 1 si les deux lignes sont identiques, sinon elle renvoi 0.(c'est une fonction pas très simple car il faut que tu compares caractères par caractères donc faisant appel à d'autres sous-fonctions que tu concevras)
secondo en supposant que tu as conçu la première étape, tu applique cette fonction sur les trois fichiers en même temps comme je te l'ai expliqué :
{
...
int n=1;
char *ligne1, *ligne2, *ligne3;
ouverture des 3 fichiers en mode "r" (pour read).
while(fscanf(fichier1, "%s", ligne1) != EOF)
{
if( (CompareLigne(ligne1, fscanf(fichier2, "%s", ligne2) == 0) || (CompareLigne(ligne1, fscanf(fichier3, "%s", ligne3) == 0))/*des qu'il y a au moins une ligne qui n'est pas identique a l'une des 2 autres*/
{
printf("\nUne des lignes n'est pas identique\n");
exit(0);/*ou return 0, en tout cas on a le resultat voulu*/
}
printf("\nLes trois lignes des %d -ieme lignes des fichiers sont identiques \n", n);
n++;
}
exit(0); /*ou return 0, c'est à toi de voir ce qui te convient mais on sort du programme*/
}
Voilà, cet algo marche à priori
Je ne sais pas comment est-ce que tu l'as codé mais si j'étais à ta place voici mon algo :
primo je défini la fonction int CompareLigne(char * ligne1, char * ligne2);
cette fonction renvoi 1 si les deux lignes sont identiques, sinon elle renvoi 0.(c'est une fonction pas très simple car il faut que tu compares caractères par caractères donc faisant appel à d'autres sous-fonctions que tu concevras)
secondo en supposant que tu as conçu la première étape, tu applique cette fonction sur les trois fichiers en même temps comme je te l'ai expliqué :
{
...
int n=1;
char *ligne1, *ligne2, *ligne3;
ouverture des 3 fichiers en mode "r" (pour read).
while(fscanf(fichier1, "%s", ligne1) != EOF)
{
if( (CompareLigne(ligne1, fscanf(fichier2, "%s", ligne2) == 0) || (CompareLigne(ligne1, fscanf(fichier3, "%s", ligne3) == 0))/*des qu'il y a au moins une ligne qui n'est pas identique a l'une des 2 autres*/
{
printf("\nUne des lignes n'est pas identique\n");
exit(0);/*ou return 0, en tout cas on a le resultat voulu*/
}
printf("\nLes trois lignes des %d -ieme lignes des fichiers sont identiques \n", n);
n++;
}
exit(0); /*ou return 0, c'est à toi de voir ce qui te convient mais on sort du programme*/
}
Voilà, cet algo marche à priori