[C++] Enregistrer contenu .txt dans structure
Résolu/Fermé
A voir également:
- [C++] Enregistrer contenu .txt dans structure
- Audacity enregistrer son pc - Guide
- Enregistrer son ecran - Guide
- Enregistrer video youtube - Guide
- Enregistrer en pdf - Guide
- Word a trouvé du contenu illisible - Guide
7 réponses
mamiemando
Messages postés
33079
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
23 avril 2024
7 749
10 mars 2009 à 01:09
10 mars 2009 à 01:09
Il y a plein de manière de faire.
1) Tu peux stocker ton fichier texte au format tsv ou csv (une ligne par structure, chaque membre apparaît dans l'ordre séparé par un caractère spécial, par exemple tabulation pour un tsv ou ; pour un csv). Du coup il est assez simple de relire ton fichier, par exemple à l'aide des fonctions getline et strtok.
https://fr.wikipedia.org/wiki/Comma-separated_values
https://fr.wikipedia.org/wiki/Format_TSV
http://man.developpez.com/man3/getline.3.php
http://www.linux-kheops.com/doc/man/manfr/man-html-0.9/man3/strtok.3.html
- Avantages : tu ne dépends d'aucune librairie, c'est simple, et tu peux l'importer dans un tableur (par exemple OpenOffice - oocalc).
- Inconvénients : il faut le coder, c'est lent, le format n'est pas forcément simple à faire évoluer (en particulier si tu décides de rajouter des attributs pour décrire tes contacts).
2) Tu peux stocker ton fichier au format xml. Il existe plein de librairies pour manipuler des fichiers xml (lecture / écriture).
https://fr.wikipedia.org/wiki/Extensible_Markup_Language
Par exemple :
http://xerces.apache.org/xerces-c/
- Avantages : c'est déjà codé, le format peut facilement évoluer, il existe des parseurs xml dans plein d'autres langages et donc ce format de fichier est facilement réutilisable.
- Inconvénients : il faut coupler ton PC avec une libraire et prendre le temps de voir comment ça marche, et comme c'est un fichier texte, c'est lent (il faut le lire, l'insérer dans la structure etc...).
3) Encore mieux, plutôt que de stocker ton annuaire sous forme de fichier texte (ce qui est lent à lire et à écrire quand le fichier devient très volumineux, même si tu n'en as a priori pas le besoin car je doute que tu aies plusieurs milliers de contacts), c'est d'écrire ta structure directement sous forme d'un binaire en utilisant des opérations de serialization et deserialization. Là c'est pour les barbus, et c'est ici que ça se passe :
https://www.boost.org/doc/libs/1_38_0/libs/serialization/doc/index.html
- Avantages : c'est déjà codé, le format peut facilement évoluer, c'est la méthode la plus rapide en terme de temps d'exécution
- Inconvénients : c'est la plus compliquée (boost n'est pas facile à prendre en main), le fichier ne peut pas être facilement réutilisé par une autre application. L'utilisation de structures sérialisées impose certaines contraintes de programmation (pas de pointeurs, de référence dans les structures à sérialiser).
Bonne chance
1) Tu peux stocker ton fichier texte au format tsv ou csv (une ligne par structure, chaque membre apparaît dans l'ordre séparé par un caractère spécial, par exemple tabulation pour un tsv ou ; pour un csv). Du coup il est assez simple de relire ton fichier, par exemple à l'aide des fonctions getline et strtok.
https://fr.wikipedia.org/wiki/Comma-separated_values
https://fr.wikipedia.org/wiki/Format_TSV
http://man.developpez.com/man3/getline.3.php
http://www.linux-kheops.com/doc/man/manfr/man-html-0.9/man3/strtok.3.html
- Avantages : tu ne dépends d'aucune librairie, c'est simple, et tu peux l'importer dans un tableur (par exemple OpenOffice - oocalc).
- Inconvénients : il faut le coder, c'est lent, le format n'est pas forcément simple à faire évoluer (en particulier si tu décides de rajouter des attributs pour décrire tes contacts).
2) Tu peux stocker ton fichier au format xml. Il existe plein de librairies pour manipuler des fichiers xml (lecture / écriture).
https://fr.wikipedia.org/wiki/Extensible_Markup_Language
Par exemple :
http://xerces.apache.org/xerces-c/
- Avantages : c'est déjà codé, le format peut facilement évoluer, il existe des parseurs xml dans plein d'autres langages et donc ce format de fichier est facilement réutilisable.
- Inconvénients : il faut coupler ton PC avec une libraire et prendre le temps de voir comment ça marche, et comme c'est un fichier texte, c'est lent (il faut le lire, l'insérer dans la structure etc...).
3) Encore mieux, plutôt que de stocker ton annuaire sous forme de fichier texte (ce qui est lent à lire et à écrire quand le fichier devient très volumineux, même si tu n'en as a priori pas le besoin car je doute que tu aies plusieurs milliers de contacts), c'est d'écrire ta structure directement sous forme d'un binaire en utilisant des opérations de serialization et deserialization. Là c'est pour les barbus, et c'est ici que ça se passe :
https://www.boost.org/doc/libs/1_38_0/libs/serialization/doc/index.html
- Avantages : c'est déjà codé, le format peut facilement évoluer, c'est la méthode la plus rapide en terme de temps d'exécution
- Inconvénients : c'est la plus compliquée (boost n'est pas facile à prendre en main), le fichier ne peut pas être facilement réutilisé par une autre application. L'utilisation de structures sérialisées impose certaines contraintes de programmation (pas de pointeurs, de référence dans les structures à sérialiser).
Bonne chance
Résolu en fait :p
fichlec>>TContact.nom>>TContact.prenom>>TContact.tel>>TContact.dateNaiss; //Récupération des données
fichlec>>TContact.nom>>TContact.prenom>>TContact.tel>>TContact.dateNaiss; //Récupération des données
Bonsoir,
Merci beaucoup pour ta réponse Mamiemando, je vais regarder ces solutions demain il commence à se faire tard.
Je pense que je vais partir sur la solution du format xml!
Merci beaucoup pour ta réponse complète et rapide!
Bonne fin de soirée,
Bèbère
Merci beaucoup pour ta réponse Mamiemando, je vais regarder ces solutions demain il commence à se faire tard.
Je pense que je vais partir sur la solution du format xml!
Merci beaucoup pour ta réponse complète et rapide!
Bonne fin de soirée,
Bèbère
mamiemando
Messages postés
33079
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
23 avril 2024
7 749
10 mars 2009 à 12:38
10 mars 2009 à 12:38
De rien et bonne continuation !
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
[o.o]REplay
Messages postés
357
Date d'inscription
vendredi 20 juin 2008
Statut
Membre
Dernière intervention
20 juillet 2009
28
10 mars 2009 à 13:02
10 mars 2009 à 13:02
Stocker tes contacts dans un fichiers texte et les mettre en mémoire à chaque démarrage va te prendre pas mal de temps suivant le nombre de contacts :/
Personnellement je te conseillerai une base de donnée.
La manipulation de mysql par exemple en C et C++ est assez simple, leur site officiel fourni les lib et des explications/exemples de chacune de leur fonction. De plus, tu pourras faire de l'indexation, accélérant considérablement la recherche dans ta base de données.
Après si tu as quelques dizaines de contacts dans ton annuaire, pas besoin de tout ça c'est sure ^^
++
Personnellement je te conseillerai une base de donnée.
La manipulation de mysql par exemple en C et C++ est assez simple, leur site officiel fourni les lib et des explications/exemples de chacune de leur fonction. De plus, tu pourras faire de l'indexation, accélérant considérablement la recherche dans ta base de données.
Après si tu as quelques dizaines de contacts dans ton annuaire, pas besoin de tout ça c'est sure ^^
++
mamiemando
Messages postés
33079
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
23 avril 2024
7 749
10 mars 2009 à 14:01
10 mars 2009 à 14:01
C'est une approche qui marche bien, mais ça consiste à mettre en place une base de donnée. Elle restera moins efficace qu'une structure sérialisée si le but c'est d'initialiser des structures.
Bonsoir,
Merci pour ta participation [o.o]REplay!
J'avais aussi pensé à une base de données au début de ce projet mais cet annuaire ne comportera pas beaucoup de contacts, je n'aurais donc pas de problèmes de temps d'attente au démarrage de l'application.
Il ne s'agit que d'une petite application que je développe pour m'améliorer un peu en c++, surtout avec cette notion de pointeurs et d'enregistrements de données dans un fichier avec lesquels j'avais un peu de mal :s
Merci beaucoup pour vos réponses!
Bèbère
Merci pour ta participation [o.o]REplay!
J'avais aussi pensé à une base de données au début de ce projet mais cet annuaire ne comportera pas beaucoup de contacts, je n'aurais donc pas de problèmes de temps d'attente au démarrage de l'application.
Il ne s'agit que d'une petite application que je développe pour m'améliorer un peu en c++, surtout avec cette notion de pointeurs et d'enregistrements de données dans un fichier avec lesquels j'avais un peu de mal :s
Merci beaucoup pour vos réponses!
Bèbère