Petite aide en C
oupsman -
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.
Configuration: Windows XP Firefox 2.0.0.16
30 réponses
- 1
- 2
Le problème décrit concerne un programme C qui lit trois fichiers et tente de comparer la première ligne de test1 et test2 pour copier la ligne identique dans test3. La meilleure réponse suggère de fermer le fichier3 après l'écriture et de le rouvrir en mode lecture pour lire la ligne copiée; elle conseille aussi de supprimer l'inclusion <cstring> et d'éviter l'inclusion inutile. Elle recommande en outre d'utiliser une boucle pour lire plusieurs lignes jusqu'à EOF et d'éviter les appels superflus comme fgets dans des endroits inappropriés. D'autres remarques évoquent des ajustements pratiques sur l'ouverture des fichiers et la synchronisation entre écriture et lecture pour éviter les lectures incomplètes.</cstring>
-
-
-
-
j'arrive pas a compiler parce que j'ai un probléme avec #include <cstring> c'est une librérie que tu a télécharger en plus??
-
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
désolé je mangeais.
Oui, j'ai déjà fait une première année de BTS IRIS ( que je repique ) et <cstring> je l'ai trouvé dans une aide pour strcat : https://en.cppreference.com/w/cpp/string/byte/strncat -
moi aussi je veux faire un bts dans 4ans (je suis en 3ème)
-
sinon je n'est pas trés bien compri ton problème pour comparé les lignes...
-
Essaies l'alternance c'est vachement bien.
Enfin, tu assimile mieux que en cours je trouve.
Tu arrives toujours pas a compiler ? -
je suis en DP3 je ne sais pas si tu connais je ne trouve pas la librérie sur le site que tu ma passer...
-
je t'explique ata :
J'ai déja posté un sujet ici hier.
Voila ce qu'il y avait marqué :
"""""""""""""""""""
Bonjour,
Voici mon problème :
Je souhaiterais avoir un document excel contenant toutes les villes de france avec leurs codes postaux ainsi que le code que l'INSEE leur attribue.
J'ai quatre fichiers :
Le premier fichier ( que j'ai nommé FRANCE08 ), téléchargé sur le site de l'INSEE contiens les villes + leurs CODE INSEE, mais pas le code postal.
Le second fichier ( nommé villes_INSEE ), téléchargé sur Internet contiens les villes + le code INSEE + le code postal de chaques ville.
Cependant, le fichier 2 contiens des villes erronées ( commune périmée en général ).
Les fichier 3 et fichier 4 sont vierges.
Mes deux fichiers sont présentés sous trois colones : Ville / Code INSEE / Code Postal sous exel.
Afin d'effectuer mon traitement, j'ai modifié mes documents "nom.xls" en "nom.txt".
Les lignes présentes dans le document texte sont sous forme :
nom ville ( tabulation ) code INSEE ( tabulation ) Code Postal ( <= les tabulation sont importantes : à la fin du traitement je veux remettre mon fichier"nom.txt" en format "nom.xls". Les tabulation servent donc à distinguer les trois cellules.
J'ai déjà commencé à réffléchir à la solution et voici ce que je compte entreprendre :
Je souhaite ouvrir le fichier1 pour concatener le nom de la ville avec son code INSEE ( afin d'etre sur qu'elle est unique ).
Ensuite, ouvrir le fichier2 afin de rechercher si l'expression "VILLE+CODE INSEE" existe dans celui ci.
Si on trouve la meme expression, alors on importe la ligne " VILLE + CODE INSEE + CODE POSTAL " trouvée dans le fichier2 dans le fichier 3.
Sinon, si "VILLE + CODE INSEE " du fichier 1 n'éxiste pas dans le fichier 2, alors on l'importe dans le fichier 4, ou je ferais la recherche à la main.
Et on fait ce traitement tant que EOF du fichier 1 n'est pas égale à TRUE.
""""""""""""""""""""""""
La je suis en train de faire des test sur des fichiers txt pour voir si j'arive a tout faire.
et mon code est en haut.
Je n'arive donc pas a copier une ligne du fichier 2 vers le fichier 3. -
euh.....bon la tu doit te dire p**** y comprent rien ce gar :p
-
Non si tu es pas dedans normal que tu comprennes pas..
xp
sa marche aussi si tu compiles sans le <cstring> en vrai. -
-
j'utilise code block peut étre que...
mon debuger me di qu'il y a une érreur dans #include <cstring> -
Je ne sais pas =/
J'ai jamais testé code block =( -
bon je vois pas l'utilité de ta lib cstring...
tu ferme ton fichier 3 apres l'ecriture puis te le reouvre avant de le lire
comme çaif (strcmp(chaine1,chaine2) == 0) { printf("Chaine1 = Chaine2 \n\n"); fprintf(fichier3, "%s", chaine2); fclose(fichier3); fichier3 = fopen("test3.txt","r"); 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(); -
-
-
Sélestat, près de strasbourg, Alsace tkt :D
-
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.
- 1
- 2