Petite aide en C
heroux67
Messages postés
21
Date d'inscription
Statut
Membre
Dernière intervention
-
oupsman -
oupsman -
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
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
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
Essaies l'alternance c'est vachement bien.
Enfin, tu assimile mieux que en cours je trouve.
Tu arrives toujours pas a compiler ?
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.
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.
Non si tu es pas dedans normal que tu comprennes pas..
xp
sa marche aussi si tu compiles sans le <cstring> en vrai.
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>
mon debuger me di qu'il y a une érreur dans #include <cstring>
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 ça
tu ferme ton fichier 3 apres l'ecriture puis te le reouvre avant de le lire
comme ça
if (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();
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.
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.