Petite aide en C

heroux67 Messages postés 21 Date d'inscription   Statut Membre Dernière intervention   -  
 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.

30 réponses

00julien00 Messages postés 1192 Date d'inscription   Statut Membre Dernière intervention   175
 
tu utilise quoi comme ide?
0
heroux67 Messages postés 21 Date d'inscription   Statut Membre Dernière intervention  
 
Visual C++ 2008 express :)
0
00julien00 Messages postés 1192 Date d'inscription   Statut Membre Dernière intervention   175
 
tu es a tes debut en programation.??
0
00julien00 Messages postés 1192 Date d'inscription   Statut Membre Dernière intervention   175
 
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??
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
heroux67 Messages postés 21 Date d'inscription   Statut Membre Dernière intervention  
 
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
0
00julien00 Messages postés 1192 Date d'inscription   Statut Membre Dernière intervention   175
 
moi aussi je veux faire un bts dans 4ans (je suis en 3ème)
0
00julien00 Messages postés 1192 Date d'inscription   Statut Membre Dernière intervention   175
 
sinon je n'est pas trés bien compri ton problème pour comparé les lignes...
0
heroux67 Messages postés 21 Date d'inscription   Statut Membre Dernière intervention  
 
Essaies l'alternance c'est vachement bien.

Enfin, tu assimile mieux que en cours je trouve.

Tu arrives toujours pas a compiler ?
0
00julien00 Messages postés 1192 Date d'inscription   Statut Membre Dernière intervention   175
 
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...
0
heroux67 Messages postés 21 Date d'inscription   Statut Membre Dernière intervention  
 
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.
0
00julien00 Messages postés 1192 Date d'inscription   Statut Membre Dernière intervention   175
 
euh.....bon la tu doit te dire p**** y comprent rien ce gar :p
0
heroux67 Messages postés 21 Date d'inscription   Statut Membre Dernière intervention  
 
Non si tu es pas dedans normal que tu comprennes pas..

xp


sa marche aussi si tu compiles sans le <cstring> en vrai.
0
00julien00 Messages postés 1192 Date d'inscription   Statut Membre Dernière intervention   175
 
j'apprend :D

non pas moyen sa marche pas
0
00julien00 Messages postés 1192 Date d'inscription   Statut Membre Dernière intervention   175
 
j'utilise code block peut étre que...
mon debuger me di qu'il y a une érreur dans #include <cstring>
0
heroux67 Messages postés 21 Date d'inscription   Statut Membre Dernière intervention  
 
Je ne sais pas =/

J'ai jamais testé code block =(
0
mype Messages postés 2435 Date d'inscription   Statut Membre Dernière intervention   437
 
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
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();

0
00julien00 Messages postés 1192 Date d'inscription   Statut Membre Dernière intervention   175
 
juste comme sa tu habite dans quelle ville ?
0
heroux67 Messages postés 21 Date d'inscription   Statut Membre Dernière intervention  
 
MERCIII :DD


testons maintenant :)
0
heroux67 Messages postés 21 Date d'inscription   Statut Membre Dernière intervention  
 
Sélestat, près de strasbourg, Alsace tkt :D
0
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.
0