Copie d'un fichier dans un tableau a 2 entrées de string - C++ - Programmation
Marsh Posté le 22-01-2003 à 10:43:11
Ben oui, un stockage par ligne est bien sympa par exemple:
Code :
|
Marsh Posté le 22-01-2003 à 18:19:44
Code :
|
Tu peux m'expliker stp ?
Marsh Posté le 22-01-2003 à 18:32:10
Code :
|
Marsh Posté le 23-01-2003 à 13:50:04
Barf g po vu vector ni namespace encore, tant pis, v continuer a l'ancienne, mais merci pour tout je garde ca kan meme !
Marsh Posté le 23-01-2003 à 16:16:14
faut pas !
c'est tout bete !
vector = tableau
vector<string> = tableau de string
ca s'utilise comme un tableau normal
a part que tu peux ajouter facilement un element sans te soucier de l'allocation etc ... avec push_back.
Y'a plein d'autres choses disponibles (tableau.size() pour sa taille, ...)
le namespace, il le faut c'est tout.
ca te permet de pourvoir utiliser string et vector sans devoir taper std:: devant :
sans using namespace std;
std::string ... std::vector
avec using namespace std;
string ... vector
Baisse pas les bras, le temps que tu vas passer a maitriser vector et string sera vite amorti par la suite !
Marsh Posté le 23-01-2003 à 16:43:46
En C++ (ou en C) on ne teste jamais eof comme ça (comme en Pascal) pour la simple bonne raison que EOF ne survient qu'apres une lecture infructueuse et pas quand on est positionné en fin de fichier.
la bonne ecriture est donc
Code :
|
la boucle va breaker en cas de EOF ou de problème d'E/S. on peut alors vérifier ce qu'il s'est passé en testant eof(), bad() ou fail()
Marsh Posté le 23-01-2003 à 16:47:32
exceptionnalnain a écrit : Barf g po vu vector ni namespace encore, tant pis, v continuer a l'ancienne, mais merci pour tout je garde ca kan meme ! |
quel interet de faire du C++ plutot que du C alors? il me semble que le code <corrigé> qui t'es proposé est tres claire, sure tout en étant tres performant
Marsh Posté le 23-01-2003 à 18:13:04
++Taz a écrit : quel interet de faire du C++ plutot que du C alors? il me semble que le code <corrigé> qui t'es proposé est tres claire, sure tout en étant tres performant |
komment tu veux ke je te répondes, si je ne sais pas ce ke C ??
cela dit merci
Marsh Posté le 23-01-2003 à 19:00:02
exceptionnalnain a écrit : Voila g besoin de bufferiser un fichier texte, husqu'a maintenant je le faisais en C avec les problèmes de gestion de taille que l'on connait. |
tu tu dis n'improt koi alors...
Marsh Posté le 23-01-2003 à 23:01:38
++Taz a écrit : En C++ (ou en C) on ne teste jamais eof comme ça (comme en Pascal) pour la simple bonne raison que EOF ne survient qu'apres une lecture infructueuse et pas quand on est positionné en fin de fichier.
|
Si tu remarque bien je fais une lecture avant le début de ma boucle justement pour prendre en compte se pb, le seule truc c que j'aurais pas du faire de push en dehors dans la boucle, mais le mettre en première instruction de celle ci.
Marsh Posté le 23-01-2003 à 23:05:34
ben tu te trompes: tu mets le bloc d'instruction avant la boucle pour simuler un do-while... mais il n'en est rien
et tu n'as pas lu mon post.
avec ton code:
Code :
|
relis mon post et fait moi confiance
Marsh Posté le 26-01-2003 à 10:45:38
++Taz a écrit : ben tu te trompes: tu mets le bloc d'instruction avant la boucle pour simuler un do-while... mais il n'en est rien
|
Je ne me trompe pas, je me suis juste mal exprimé, voilà ce que j'aurais du mettre comme code:
Code :
|
Et si on veut blinder la chose on peut même vérifier qu'aucun octé n'a été lu lors du getline.
Marsh Posté le 26-01-2003 à 11:10:14
ce qui ne fonctionne toujours aps si l'erreur est autre que eof (et ça arrive). et en plus ton code est moins concis... t'entete pas
Marsh Posté le 26-01-2003 à 21:34:30
++Taz a écrit : ce qui ne fonctionne toujours aps si l'erreur est autre que eof (et ça arrive). et en plus ton code est moins concis... t'entete pas |
Je me demande qui s'entête par ce que ça c la forme clasique pour ce genre de traitement... enfin bon
Marsh Posté le 26-01-2003 à 22:03:32
c'est peut etre la forme classique en pascal, mais pas en C++, ni en C d'ailleurs.
la fonction membre eof ne sert pas à détecter l'erreur mais à la qualifier. sinon, on ne se serait pas donné le mal de faire des fonctions avec des codes d'erreurs. je suis désolé pour toi mais c'est comme ça. le comportement que tu utilises peut etre un bug grave en cas d'erreur d'E/S autre que eof (et ça arrive plus que tu ne semble le croire).
allez fais-moi plaisir! en plus la méthode usuelle en C++ est aussi plus concise. je ne vois vraiment pas de raisons pour ne pas l'employer.
edit: au fait, n'oublies pas de fermer tes fichiers ouverts.
Marsh Posté le 27-01-2003 à 03:14:42
Un bon principe de programamtion est qu'on ne devrait pas spécifier deux fois la même chose.
Or, le getline(fichier,ligne); est en double dans ton exemple LetoII, c'est une opportunité de bogue en cas de mise à jour.
Si c'est le fait de mettre une expression complexe en test qui te gêne:
Code :
|
Marsh Posté le 27-01-2003 à 07:02:46
merci musaran. ton code est strictement équivalent au mien. en effet getline renvoie un istream&, qui peut donc etre évalué (et dispose de operator!)
donc pas de problème.
moi j'aurais vu la chose de façon plus optimiste: if(is.good())
Marsh Posté le 27-01-2003 à 07:55:20
Bon si vous vous y métez à deux contre moi je me rend
On va pas se foutre sur la gueule pour bou de code c ridicule. Soit dit en passant je trouve le break relativement dégueux, mais bon, chacun est libre de faire ce qu'il veut.
Pour en revenir àa ce que disait ++Taz, je ne vois pas pkoi tu me parle de détection d'erreur, tout ce qui m'interresse dans ce bout de code c de détecter la fin du flux (d'où le eof). Je reconnais volontier qu'il n'y a pas de gestion d'erreur dans ce code et ct pas franchement le but que je visais. Enfin pour conclur, effectivement ton code marche et me plait bien, la prochaine fois que j'ai besoin d'utiliser les flux du C++ j'y penserai
Marsh Posté le 22-01-2003 à 09:28:33
Voila g besoin de bufferiser un fichier texte, husqu'a maintenant je le faisais en C avec les problèmes de gestion de taille que l'on connait.
Je voudrais savoir si l'on peut utiliser le type string du C++ pour se faciliter la vie de ce point de vue.
Merci