Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1481 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Ecrire de gros fichier texte en C++ pur

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Ecrire de gros fichier texte en C++ pur

n°1150609
ddesbuis
Posté le 15-07-2005 à 13:12:58  profilanswer
 

Comment ecrire efficacement (donc rapidement) des fichiers de 100Mo à 4-5Go en texte avec un ofstream ?
 
il me semble que :
 
    std::ofstream f_out;      
    f_out.open ( nomfic.c_str (), std::ios::out );
     
    char mybuffer [32768];
    f_out.rdbuf()->pubsetbuf(mybuffer,32768);
 
permet d'accelerer le process à condition d'utiliser des
 
"\n" et non des std::endl ( std::endl = "\n" + flush() )
 
si un expert en la matiere savait me donner une recette !! I would be very happy
 
 

mood
Publicité
Posté le 15-07-2005 à 13:12:58  profilanswer
 

n°1150636
Taz
bisounours-codeur
Posté le 15-07-2005 à 14:04:16  profilanswer
 

ta méthode fonctionne. j'espère que t'as pas blindé ton code de std::endl dans tous les sens ...
 
Évite aussi de mélanger char et char[2] : '\n' et pas "\n"
 
Après en écriture, en standard, y a pas de mystère. Fais confiance à l'OS sous jacent : y a pas de méthode mirable, il faut juste espérer que ton OS sait faire du caching de disque efficacement, et ça passera tout seul.
 
 
Enfin, fait gaffe de pas trop tapper sur la pile quand même :
 
    char mybuffer [32768];
    f_out.rdbuf()->pubsetbuf(mybuffer,32768);  
 
Moi j'écrirais :
 
std::vector<char> buffer(N);
out.rdbuf()->pubsetbuf(&buffer[0], buffer.size());  
 
 
Tu peux également définir ta propore classe de streambuf

n°1150672
ddesbuis
Posté le 15-07-2005 à 14:39:55  profilanswer
 

> Évite aussi de mélanger char et char[2] : '\n' et pas "\n"
 
explique moi ca ??? quel est la diff entre '\n' et "\n"
 
 
> Moi j'écrirais :
> std::vector<char> buffer(N);
> out.rdbuf()->pubsetbuf(&buffer[0], buffer.size());  
 
buffer(N); ??? qui c'est N ... je pige pas cette écriture !!!
 
merci de m'eclairer !

n°1150705
Taz
bisounours-codeur
Posté le 15-07-2005 à 15:19:21  profilanswer
 

OK, range les buf et tout ça : ça fait 2 jours que tu fais du C++, c'est pas la peine de te prendre le choux, surtout que tu vas dans le mur. utilise les fstream tout bêtement, quelque soit la taille du fichier et ça ira très bien.

n°1150760
ddesbuis
Posté le 15-07-2005 à 16:50:28  profilanswer
 

scuse moi gars mais je te trouve tres impoli...
 
demander quand on ne sait pas c'est la base pour apprendre ...  
et les forums sont des lieux pour s'entraider pas pour frimer
 
si tu veux te la jouer frime je te conseille de discuter C++ avec Bjorn Stroustrup .. je serai trop content de te voir froncer les sourcils...
 
pour ma part j'ai ecrit un prog de photogrammétrie orthophoto et calcul par les moindres carrés.. le prog utilise Boost et wxWidgets... je ne suis donc pas un naze man... mais si j'ai encore des tas de choses a apprendre ma force etant peut de le savoir contrairement a toi qui parade ... borgne au milieu des aveugles...
 
a bon entendeur salut

n°1150767
Taz
bisounours-codeur
Posté le 15-07-2005 à 16:57:30  profilanswer
 

je parade pas, ton message précédent est affligeant, avec ton dernier message, t'en feras rire plus d'un. C'est pas la peine de nous faire une démo, tu t'es ridiculisé, c'est tout.

n°1150774
ddesbuis
Posté le 15-07-2005 à 17:02:13  profilanswer
 

OK mec comme tu veux mais je te trouve pas constructif
 
tans pis pour toi :-)

n°1150776
Taz
bisounours-codeur
Posté le 15-07-2005 à 17:05:07  profilanswer
 

les autres ont vu dans cette dernière réponse une certaine ironie.

n°1150788
blastman
just me !
Posté le 15-07-2005 à 17:22:39  profilanswer
 

Bjarne Stroustrup pas Bjorn  :o  


---------------
http://www.blastmanu.info
n°1150791
sn_pilot
Posté le 15-07-2005 à 17:25:45  profilanswer
 

ddesbuis a écrit :

> Évite aussi de mélanger char et char[2] : '\n' et pas "\n"
 
explique moi ca ??? quel est la diff entre '\n' et "\n"
 
merci de m'eclairer !


Je dirais (exprience en C) :
 - '\n' : simple quote signifie que tu as un caractère. Donc ca sera un retour a la ligne (La touche Entree en somme !).
 - "\n" : chaine de caracteres. Donc ca affichera \n. Enfin la j'en suis moins sur ...
 
 
(Siouplait, me tapez pas si j'ai dit une cauneurie ;) )


Message édité par sn_pilot le 15-07-2005 à 17:26:53
mood
Publicité
Posté le 15-07-2005 à 17:25:45  profilanswer
 

n°1150797
ddesbuis
Posté le 15-07-2005 à 17:34:51  profilanswer
 

non pour ecrire \n dans le flux en tant que chaine de caractere il faut ecrire
 
cout << "ce que tu veux \\n";
 
on double de \ pour qu'il soit consideré comme un caractere et ca donne :  
ce que tu veux \n
 
et sorry pour monsieur bjarne dont j'ai raté le nom ;-)

n°1150806
Joel F
Real men use unique_ptr
Posté le 15-07-2005 à 18:00:17  profilanswer
 

'\n' = 1 char
"\n" = '\n','\0' = 2 char :o
 
non non je t'assure , c'est pas Taz qui se ridiculise :o

n°1150808
Joel F
Real men use unique_ptr
Posté le 15-07-2005 à 18:01:33  profilanswer
 

ddesbuis a écrit :


buffer(N); ??? qui c'est N ... je pige pas cette écriture !!!


 
Avant d'utilsier Boost & wxWidgets, tu devrais reviser ta STL [:pingouino] ainsi que le concept d'exemple [:pingouino]

n°1150831
jagstang
Pa Capona ಠ_ಠ
Posté le 15-07-2005 à 18:35:44  profilanswer
 

ddesbuis a écrit :

scuse moi gars mais je te trouve tres impoli...
 
demander quand on ne sait pas c'est la base pour apprendre ...  
et les forums sont des lieux pour s'entraider pas pour frimer
 
si tu veux te la jouer frime je te conseille de discuter C++ avec Bjorn Stroustrup .. je serai trop content de te voir froncer les sourcils...

pour ma part j'ai ecrit un prog de photogrammétrie orthophoto et calcul par les moindres carrés.. le prog utilise Boost et wxWidgets... je ne suis donc pas un naze man...
mais si j'ai encore des tas de choses a apprendre ma force etant peut de le savoir contrairement a toi qui parade ... borgne au milieu des aveugles...
 
a bon entendeur salut



---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
n°1150838
Joel F
Real men use unique_ptr
Posté le 15-07-2005 à 18:48:36  profilanswer
 

Arrete Jag c'est un gars qui fait des moindres carrés o.O tu risque gros là !

n°1150846
blastman
just me !
Posté le 15-07-2005 à 19:02:30  profilanswer
 

n'empéche que les moindres carrés ca me casse les testicules


---------------
http://www.blastmanu.info
n°1150849
ddesbuis
Posté le 15-07-2005 à 19:04:56  profilanswer
 

bon donc  
'\n' et le caractere saut de ligne
 
alors que
"\n" est une chaine de caractere contenant le caractere saut de ligne
 
voila donc l'histoire
 
reste ma question sur buffer(N) ?
 
à vous de voir si vous voulez repondre ou juste deconner :-)

n°1150860
Joel F
Real men use unique_ptr
Posté le 15-07-2005 à 19:15:06  profilanswer
 

bordel tu connais pas std::vector<T> :o
 
vector<char> buffer(N) ca construit, genre, un vecteur (un tabelot :o) de char de N éléments, style  :
 
http://www.sgi.com/tech/stl/Vector.html
 
and STFU :o


Message édité par Joel F le 15-07-2005 à 19:15:21
n°1150868
ddesbuis
Posté le 15-07-2005 à 19:21:22  profilanswer
 

bon donc il faut ecrire :
 
std::size_type N = 32768;
std::vector<char> buffer(N);
out.rdbuf()->pubsetbuf(&buffer[0], buffer.size());  
 
et en quoi cela est il mieux que :
 
 char mybuffer [32768];
 f_out.rdbuf()->pubsetbuf(mybuffer,32768);  
 
c'est une question pas de l'ironie !

n°1150878
Joel F
Real men use unique_ptr
Posté le 15-07-2005 à 19:27:56  profilanswer
 

tu fais du C++ voila pourquoi :o
et perso se tapper 32768 octets sur la pile c pas malin malin [:pingouino]
Mais bon je ne t'apprends rien. Je veut dire tu fais des moindres carrés

n°1150908
ddesbuis
Posté le 15-07-2005 à 19:54:01  profilanswer
 

au contraire tu m'apprends des trucs Captain, et c'est pour ca que je pose des questions...
 
la pile certe mais std::vector va bien chercher aussi son allocation memoire quelque part non ? tu veux dire que std::vector sait mieux gerer les rescources memoire ? c'est ce qui ce dit en tout cas ... mais concretement pourquoi c'est mieux ?
 
bon la je chipote ... car ds mes prog j'utilise quasi jamais de char[] mais tjs des std::vector<char>
 
 
je disais ce que je programmais plus pour discuter qu'autre chose ... j'ai surement pas la pretention d'être l'as des as du C++ mais bon on fait des trucs sympa qui sont bien utilse dans notre metier :-)
 
et sur ce bon WE à vous

n°1150921
cricri_
Posté le 15-07-2005 à 20:17:53  profilanswer
 

Ce que veux dire Joel, enfin je pense peut-être mal ..;)
C'est qu'il vaut mieux déclarer ça dans la classe mais pas dans une fonction car cela sera mis dans la pile, et là ça peut être chaud si c'est gros ...

n°1150961
chrisbk
-
Posté le 15-07-2005 à 21:24:40  profilanswer
 

blastman a écrit :

Bjarne Stroustrup pas Bjorn  :o


Bjork, pas Bjorn :o

n°1150966
Taz
bisounours-codeur
Posté le 15-07-2005 à 21:36:36  profilanswer
 

laisse tomber JoelF, il est pas récupérable.

n°1151005
retrox
Posté le 15-07-2005 à 22:22:11  profilanswer
 

mais si tout le monde est récupérable!
 
ddesbuis > cherche la difference entre pile et tas (stack & heap)

n°1151035
Joel F
Real men use unique_ptr
Posté le 15-07-2005 à 22:52:38  profilanswer
 

Taz a écrit :

laisse tomber JoelF, il est pas récupérable.


 
tu es mezant  :cry:

n°1151041
Taz
bisounours-codeur
Posté le 15-07-2005 à 22:59:33  profilanswer
 

bah non, je suis juste stupéfait, j'ai jamais vu quelqu'un retourner sa veste aussi vite ... le mec il fait encore le coup pour std::vecto<> : d'abord il connaît pas, ensuite il dit qu'il utilise que ça. Idem pour les allocations dynamiques ...

n°1151082
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 16-07-2005 à 00:20:12  profilanswer
 

[:cupra]


---------------
J'ai un string dans l'array (Paris Hilton)
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Ecrire de gros fichier texte en C++ pur

 

Sujets relatifs
MAJ d'un fichier texte problem lecture d un fichier texte !!
[D4] Ds quel fichier du cd de D4 cette aide précise ?input fichier
tri d'un fichier en COBOLXML parcour d'un fichier XML sous Windev
[MySql]erreur sur un fichier frmdecompresser fichier zip
Plus de sujets relatifs à : Ecrire de gros fichier texte en C++ pur


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR