Lecture d'un fichier pour mettre les données dans un tableau
cyberkate
Messages postés13Date d'inscriptionjeudi 21 avril 2005StatutMembreDernière intervention25 avril 2005
-
24 avril 2005 à 21:13
cyberkate
Messages postés13Date d'inscriptionjeudi 21 avril 2005StatutMembreDernière intervention25 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();
};
};
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
cyberkate
Messages postés13Date d'inscriptionjeudi 21 avril 2005StatutMembreDernière intervention25 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.