Lecture d'un fichier pour mettre les données dans un tableau

cyberkate Messages postés 13 Date d'inscription jeudi 21 avril 2005 Statut Membre Dernière intervention 25 avril 2005 - 24 avril 2005 à 21:13
cyberkate Messages postés 13 Date d'inscription jeudi 21 avril 2005 Statut Membre Dernière intervention 25 avril 2005 - 25 avril 2005 à 20:58
Bonjour !

Je développe une application en mode console en C++.
Voici le thème : je veux gérer des clients qui réalisent plusieurs abonnements à un magazine.

J'ai donc créé une classe C_client et une classe C_abonnement.
Lors du chargement de l'application, je souhaite lire un fichier dans lequel je stocke les données. Pour cela, je voudrais placer dans un tableau tabClient de type C_client, au lancement de l'application, toutes les données relatives à chaque client (nom, prenom, etc.)

Pour ce qui est du chargement, voici ma fonction actuelle :
void chargeClient()
{
monFichier = fopen("abonnements.txt", "r+"); //ouverture du fichier en lecture


if (monFichier == NULL)
{
cout << "Erreur d'ouverture du fichier Abonnements." << endl;
}
else
{
int i;
for (i=0;i<MAXIMUM;i++)
{
tmp = fread(&clientEnCours, sizeof(clientEnCours), 1, monFichier); // on lit une ligne par une ligne


if (!tmp) // si la ligne est vide
{
cout << "Erreur de lecture." << endl;
}
else
{
tabClient[i] = clientEnCours;
};
};


fclose(monFichier); // fermeture du fichier
};
};

Et pour l'enregistrement :
void enregFichier()
{
//int i;


// si le fichier est lisible...
if ( is_readable( "abonnements.txt" ) )
{ // ...alors on écrit dedans en effacant tout
std::ofstream file("abonnements.txt");
for (int i=0; i<MAXIMUM; i++)
{
file << tabClient[i] << endl;
};
file.close();
};
};

Pour plus de précisions, vous pouvez regarder ce post ou bien télécharger le script des fichiers .cpp et .h ici.

Merci de votre aide.

2 réponses

luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
24 avril 2005 à 23:01
Mais évites d'utiliser deux librairies différentes. Tu as enregistrer avec fstream donc lit également le fichier avec fstream.



void chargeClient()
{

std::ofstream monFichier
monFichier.open("abonnements.txt",std::ios::in);



int i;
for (i=0;i<MAXIMUM;i++)
{
tmp = fread(&clientEnCours, sizeof(clientEnCours), 1, monFichier);



tabClient[i] = clientEnCours;
}



monFichier.close();
};


T'encombre pas avec la gestion d'erreur pour le moment.



tmp = fread(&clientEnCours, sizeof(clientEnCours), 1, monFichier); // on lit une ligne par une ligne



Ah bon ? tu lis pas une ligne par ligne la. La taille retournée par
sizeof n'a aucun rapport avec la quantité de donnée utilisé pour
mémoriser. Ca n'a un rapport que si tu enregistres en binaire.



Ensuite, pourquoi tu mets une boucle fort ?


for (i=0;i<MAXIMUM;i++)




Enfin, ce genre de chose, faut pas réver, ca marche pas :)

tabClient[i] = clientEnCours;




La librairie lit du texte, et faut le convertir en float ou int s'il le faut.



Pour pouvoir t'aider faut que tu postes le fichier abonnements.txt
0
cyberkate Messages postés 13 Date d'inscription jeudi 21 avril 2005 Statut Membre Dernière intervention 25 avril 2005
25 avril 2005 à 20:58
En fait, ce que je voudrais faire, c'est stocker au chargement de l'application les clients dans mon tableau tabClient. D'où ma boucle. Je pensais lire "client par client" dans le fichier et ajouter les données (nom, prenom, etc ainsi que le tableau d'abonnements).
Puis c'est dommage que tabClient[i] = clientEnCours; ne marche pas... Je ne vois pas comment faire.

Sinon, pour mon fichier txt, tu peux le télécharger ici. Il ne possède pour l'instant qu'un client sans abonnements (je n'arrive toujours pas à enregistrer les abonnements)

PS : Il y a un petit bug au niveau du code postal qui vient de je ne sais où... il concatène la ville.
0
Rejoignez-nous