C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Re: ifstream, vector et istreambuf_iterator

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French)
View previous topic :: View next topic  
Author Message
Vincent Richard
Guest





PostPosted: Sun Jul 06, 2003 9:01 pm    Post subject: Re: ifstream, vector et istreambuf_iterator Reply with quote



Le Dimanche 6 Juillet 2003 22:03, Vincent Richard a écrit :

Quote:
Maintenant, si je veux faire la même chose
avec un std::vector <unsigned char>, j'obtiens une erreur avec le code
suivant :

std::vector <unsigned char> data;

std::copy(std::istreambuf_iterator<unsigned char>(file), // ligne 14
std::istreambuf_iterator<unsigned char>(),
std::back_inserter(data));

J'ai trouvé le problème : en fait, il faut utiliser un "istream_iterator"
de l'en-tête <iterator>...

Vincent

--
SL> Au fait elle est mieux ma signature maintenant ?
Oui. T'enlève encore les conneries que t'as écrit dedans et c'est bon.
-+- JB in <http://www.le-gnu.net> : Le neuneuttoyage par le vide -+-

Back to top
kanze@gabi-soft.fr
Guest





PostPosted: Mon Jul 07, 2003 8:24 am    Post subject: Re: ifstream, vector et istreambuf_iterator Reply with quote



Vincent Richard <chere-loque.MARRE-DE-LA-PUB (AT) wanadoo (DOT) fr.invalid> wrote
in message news:<3f088e22$0$5423$626a54ce (AT) news (DOT) free.fr>...

Quote:
Le Dimanche 6 Juillet 2003 22:03, Vincent Richard a écrit :

Maintenant, si je veux faire la même chose avec un std::vector
unsigned char>, j'obtiens une erreur avec le code suivant :

std::vector <unsigned char> data;

std::copy(std::istreambuf_iterator<unsigned char>(file), // ligne 14
std::istreambuf_iterator<unsigned char>(),
std::back_inserter(data));

J'ai trouvé le problème : en fait, il faut utiliser un
"istream_iterator" de l'en-tête <iterator>...

À la différence près que la sémantique n'est pas la même.
istream_iterator utilise des opérateurs <<, qui saute des espaces.

--
James Kanze GABI Software mailto:kanze (AT) gabi-soft (DOT) fr
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France, Tél. : +33 (0)1 30 23 45 16

Back to top
Vincent Richard
Guest





PostPosted: Mon Jul 07, 2003 9:14 am    Post subject: Re: ifstream, vector et istreambuf_iterator Reply with quote



Le Lundi 7 Juillet 2003 10:24, [email]kanze (AT) gabi-soft (DOT) fr[/email] a écrit :

Quote:
Vincent Richard <chere-loque.MARRE-DE-LA-PUB (AT) wanadoo (DOT) fr.invalid> wrote
in message news:<3f088e22$0$5423$626a54ce (AT) news (DOT) free.fr>...

Le Dimanche 6 Juillet 2003 22:03, Vincent Richard a écrit :

Maintenant, si je veux faire la même chose avec un std::vector
unsigned char>, j'obtiens une erreur avec le code suivant :

std::vector <unsigned char> data;

std::copy(std::istreambuf_iterator<unsigned char>(file), // ligne
14
std::istreambuf_iterator<unsigned char>(),
std::back_inserter(data));

J'ai trouvé le problème : en fait, il faut utiliser un
"istream_iterator" de l'en-tête <iterator>...

À la différence près que la sémantique n'est pas la même.
istream_iterator utilise des opérateurs <<, qui saute des espaces.

Quelle est la méthode correcte pour lire des données binaires sans problème
dans un std::vector
Merci pour ta réponse.

Vincent

--
SL> Au fait elle est mieux ma signature maintenant ?
Oui. T'enlève encore les conneries que t'as écrit dedans et c'est bon.
-+- JB in <http://www.le-gnu.net> : Le neuneuttoyage par le vide -+-

Back to top
kanze@gabi-soft.fr
Guest





PostPosted: Mon Jul 07, 2003 3:55 pm    Post subject: Re: ifstream, vector et istreambuf_iterator Reply with quote

Vincent Richard <chere-loque.MARRE-DE-LA-PUB (AT) wanadoo (DOT) fr.invalid> wrote
in message news:<3f0939f8$0$5439$626a54ce (AT) news (DOT) free.fr>...
Quote:
Le Lundi 7 Juillet 2003 10:24, [email]kanze (AT) gabi-soft (DOT) fr[/email] a écrit :

Vincent Richard <chere-loque.MARRE-DE-LA-PUB (AT) wanadoo (DOT) fr.invalid
wrote


Quote:
Le Dimanche 6 Juillet 2003 22:03, Vincent Richard a écrit :

Maintenant, si je veux faire la même chose avec un std::vector
unsigned char>, j'obtiens une erreur avec le code suivant :

std::vector <unsigned char> data;

std::copy(std::istreambuf_iterator<unsigned char>(file), // ligne
14
std::istreambuf_iterator<unsigned char>(),
std::back_inserter(data));

J'ai trouvé le problème : en fait, il faut utiliser un
"istream_iterator" de l'en-tête <iterator>...

À la différence près que la sémantique n'est pas la même.
istream_iterator utilise des opérateurs <<, qui saute des espaces.

Quelle est la méthode correcte pour lire des données binaires sans
problème dans un std::vector

Avec open, read et close. C-à-d avec des routines du système. Les
transferts du système d'exploitation vers le programme C++ se font par
char, toujours.

Dans la pratique,

std::vector< unsigned char > data ;
std::copy( std::istreambuf_iterator< char >( file ),
std::istreambuf_iterator< char >(),
std::back_inserter( data ) ) ;

doit marcher parfaitement. Au moins sur un système complément à deux.

Une bonne question, c'est comment lire un fichier binaire sur un système
complément à un avec des char signés. A priori, c'est impossible.

--
James Kanze GABI Software mailto:kanze (AT) gabi-soft (DOT) fr
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France, Tél. : +33 (0)130234516

Back to top
Vincent Richard
Guest





PostPosted: Mon Jul 07, 2003 7:56 pm    Post subject: Re: ifstream, vector et istreambuf_iterator Reply with quote

Le Lundi 7 Juillet 2003 17:55, [email]kanze (AT) gabi-soft (DOT) fr[/email] a écrit :

Quote:
Quelle est la méthode correcte pour lire des données binaires sans
problème dans un std::vector <unsigned char> ?

Avec open, read et close. C-à-d avec des routines du système. Les
transferts du système d'exploitation vers le programme C++ se font par
char, toujours.

Dans la pratique,

std::vector< unsigned char > data ;
std::copy( std::istreambuf_iterator< char >( file ),
std::istreambuf_iterator< char >(),
std::back_inserter( data ) ) ;

doit marcher parfaitement. Au moins sur un système complément à deux.

Finalement, après quelques recherches sur des groupes anglophones, je suis
tombé sur le code suivant ; (assez) portable, mais non standard :

std::vector <unsigned char> data;
const std::vector <unsigned char>::size_type size =
file.seekg(0, std::ios::end).tellg();

if (file.good() && size < data.max_size())
{
data.resize(size);
file.seekg(0).read(&data[0], size);
}

Merci encore.

Vincent

--
SL> Au fait elle est mieux ma signature maintenant ?
Oui. T'enlève encore les conneries que t'as écrit dedans et c'est bon.
-+- JB in <http://www.le-gnu.net> : Le neuneuttoyage par le vide -+-

Back to top
Fabien LE LEZ
Guest





PostPosted: Tue Jul 08, 2003 5:24 pm    Post subject: Re: ifstream, vector et istreambuf_iterator Reply with quote

On Tue, 08 Jul 2003 11:04:01 +0200, Vincent Richard
<chere-loque.MARRE-DE-LA-PUB (AT) wanadoo (DOT) fr.invalid> wrote:

Quote:
comp.lang.c++

C'est peut-être du snobisme de ma part, mais j'ai l'impression que
tous les gens un peu compétents en C++ vont plutôt sur
comp.lang.c++.moderated...


--
Tout sur fr.* (FAQ, etc.) : http://www.usenet-fr.net/fur/
et http://www.aminautes.org/forums/serveurs/tablefr.html
Archives : http://groups.google.com/advanced_group_search
http://www.usenet-fr.net/fur/usenet/repondre-sur-usenet.html

Back to top
Christophe Lephay
Guest





PostPosted: Tue Jul 08, 2003 6:23 pm    Post subject: Re: ifstream, vector et istreambuf_iterator Reply with quote

"Fabien LE LEZ" <gramster (AT) gramster (DOT) com> a écrit dans le message de
news:ohvlgvgnd3haurfu4hud4oecriv541abeg (AT) 4ax (DOT) com...
Quote:
On Tue, 08 Jul 2003 11:04:01 +0200, Vincent Richard
comp.lang.c++

C'est peut-être du snobisme de ma part, mais j'ai l'impression que
tous les gens un peu compétents en C++ vont plutôt sur
comp.lang.c++.moderated...

Encore qu'il en reste quelques uns plus que compétents sur le groupe non
modéré...

Chris



Back to top
Fabien LE LEZ
Guest





PostPosted: Tue Jul 08, 2003 8:59 pm    Post subject: Re: ifstream, vector et istreambuf_iterator Reply with quote

On Tue, 8 Jul 2003 20:23:29 +0200, "Christophe Lephay"
<christophe-lephay (AT) wanadoo (DOT) fr> wrote:

Quote:
Encore qu'il en reste quelques uns plus que compétents sur le groupe non
modéré...

Ils ont beaucoup de courage ou beaucoup de temps libre ?


--
Tout sur fr.* (FAQ, etc.) : http://www.usenet-fr.net/fur/
et http://www.aminautes.org/forums/serveurs/tablefr.html
Archives : http://groups.google.com/advanced_group_search
http://www.usenet-fr.net/fur/usenet/repondre-sur-usenet.html

Back to top
kanze@gabi-soft.fr
Guest





PostPosted: Wed Jul 09, 2003 8:23 am    Post subject: Re: ifstream, vector et istreambuf_iterator Reply with quote

"Christophe Lephay" <christophe-lephay (AT) wanadoo (DOT) fr> wrote

Quote:
"Fabien LE LEZ" <gramster (AT) gramster (DOT) com> a écrit dans le message de
news:ohvlgvgnd3haurfu4hud4oecriv541abeg (AT) 4ax (DOT) com...
On Tue, 08 Jul 2003 11:04:01 +0200, Vincent Richard
comp.lang.c++

C'est peut-être du snobisme de ma part, mais j'ai l'impression que
tous les gens un peu compétents en C++ vont plutôt sur
comp.lang.c++.moderated...

Encore qu'il en reste quelques uns plus que compétents sur le groupe
non modéré...

S'ils n'ont pas déscendu l'algorithme qui a été posté ici en flammes
tout de suite, j'ai mes doutes.

--
James Kanze GABI Software mailto:kanze (AT) gabi-soft (DOT) fr
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16

Back to top
Christophe Lephay
Guest





PostPosted: Wed Jul 09, 2003 11:40 am    Post subject: Re: ifstream, vector et istreambuf_iterator Reply with quote

<kanze (AT) gabi-soft (DOT) fr> a écrit dans le message de
news:d6652001.0307090023.4c8bc7ad (AT) posting (DOT) google.com...
Quote:
"Christophe Lephay" <christophe-lephay (AT) wanadoo (DOT) fr> wrote in message
Encore qu'il en reste quelques uns plus que compétents sur le groupe
non modéré...

S'ils n'ont pas déscendu l'algorithme qui a été posté ici en flammes
tout de suite, j'ai mes doutes.

Il l'a surement été, mais on ne lit pas toujours le fil au grand complet
quand on fait des recherches sur google...

Chris



Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.