Petite aide en C

Fermé
heroux67 Messages postés 21 Date d'inscription mardi 23 septembre 2008 Statut Membre Dernière intervention 6 novembre 2008 - 25 sept. 2008 à 18:39
 oupsman - 26 sept. 2008 à 23:14
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 1189 Date d'inscription jeudi 20 décembre 2007 Statut Membre Dernière intervention 21 mars 2010 175
25 sept. 2008 à 18:40
tu utilise quoi comme ide?
0
heroux67 Messages postés 21 Date d'inscription mardi 23 septembre 2008 Statut Membre Dernière intervention 6 novembre 2008
25 sept. 2008 à 18:41
Visual C++ 2008 express :)
0
00julien00 Messages postés 1189 Date d'inscription jeudi 20 décembre 2007 Statut Membre Dernière intervention 21 mars 2010 175
25 sept. 2008 à 18:47
tu es a tes debut en programation.??
0
00julien00 Messages postés 1189 Date d'inscription jeudi 20 décembre 2007 Statut Membre Dernière intervention 21 mars 2010 175
25 sept. 2008 à 18:51
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 mardi 23 septembre 2008 Statut Membre Dernière intervention 6 novembre 2008
25 sept. 2008 à 19:09
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 1189 Date d'inscription jeudi 20 décembre 2007 Statut Membre Dernière intervention 21 mars 2010 175
25 sept. 2008 à 19:13
moi aussi je veux faire un bts dans 4ans (je suis en 3ème)
0
00julien00 Messages postés 1189 Date d'inscription jeudi 20 décembre 2007 Statut Membre Dernière intervention 21 mars 2010 175
25 sept. 2008 à 19:14
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 mardi 23 septembre 2008 Statut Membre Dernière intervention 6 novembre 2008
25 sept. 2008 à 19:14
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 1189 Date d'inscription jeudi 20 décembre 2007 Statut Membre Dernière intervention 21 mars 2010 175
25 sept. 2008 à 19:17
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 mardi 23 septembre 2008 Statut Membre Dernière intervention 6 novembre 2008
25 sept. 2008 à 19:17
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 1189 Date d'inscription jeudi 20 décembre 2007 Statut Membre Dernière intervention 21 mars 2010 175
25 sept. 2008 à 19:25
euh.....bon la tu doit te dire p**** y comprent rien ce gar :p
0
heroux67 Messages postés 21 Date d'inscription mardi 23 septembre 2008 Statut Membre Dernière intervention 6 novembre 2008
25 sept. 2008 à 19:26
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 1189 Date d'inscription jeudi 20 décembre 2007 Statut Membre Dernière intervention 21 mars 2010 175
25 sept. 2008 à 19:27
j'apprend :D

non pas moyen sa marche pas
0
00julien00 Messages postés 1189 Date d'inscription jeudi 20 décembre 2007 Statut Membre Dernière intervention 21 mars 2010 175
25 sept. 2008 à 19:28
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 mardi 23 septembre 2008 Statut Membre Dernière intervention 6 novembre 2008
25 sept. 2008 à 19:29
Je ne sais pas =/

J'ai jamais testé code block =(
0
mype Messages postés 2435 Date d'inscription jeudi 1 novembre 2007 Statut Membre Dernière intervention 16 août 2010 436
25 sept. 2008 à 19:29
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 1189 Date d'inscription jeudi 20 décembre 2007 Statut Membre Dernière intervention 21 mars 2010 175
25 sept. 2008 à 19:31
juste comme sa tu habite dans quelle ville ?
0
heroux67 Messages postés 21 Date d'inscription mardi 23 septembre 2008 Statut Membre Dernière intervention 6 novembre 2008
25 sept. 2008 à 19:31
MERCIII :DD


testons maintenant :)
0
heroux67 Messages postés 21 Date d'inscription mardi 23 septembre 2008 Statut Membre Dernière intervention 6 novembre 2008
25 sept. 2008 à 19:34
Sélestat, près de strasbourg, Alsace tkt :D
0
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