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

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Suivante
Auteur Sujet :

[C++] Lecture de fichier

n°852363
el muchach​o
Comfortably Numb
Posté le 17-09-2004 à 08:15:23  profilanswer
 

Reprise du message précédent :

Burgergold a écrit :

bin à vrai dire la dernière fois qu'on s'est parlé ca s'est mal fini, alors j'préfère les éviter :D (à vrai dire, jai aucune idée de qui tu parles :D)
 
mais merci pour l'explication


 
Des grands gourous du C++.
Stroustrup : créateur du langage.
Herb Sutter : http://www.gotw.ca/gotw/
Scott Meyers : "Effective C++", "More Effective C++"
 
Pour ta question, je ne sais pas. Moi, j'essaierais de copier le stream directement dans une structure que j'agrandis au fur et à mesure (donc pas un vector si possible) par a coups (de 10 ou 100 ko) -> pas de 2e passe.


Message édité par el muchacho le 17-09-2004 à 08:27:16
mood
Publicité
Posté le 17-09-2004 à 08:15:23  profilanswer
 

n°852373
Taz
bisounours-codeur
Posté le 17-09-2004 à 08:40:03  profilanswer
 

euh et pourquoi pas vector justement ?

n°852488
burgergold
5$? va chez l'diable!
Posté le 17-09-2004 à 11:46:54  profilanswer
 

Taz a écrit :

euh et pourquoi pas vector justement ?


 
le prof m'a dit de ne pas utiliser vector pour ce tp (prof <-  :kaola:)
 
alors là j'ai un tableau, mais je fais 2 accès fichiers, je me demandais si avoir un seul accès fichier (en copiant ma stream dans un autre ou un truc du genre) pouvait valloir la peine

n°852523
Lam's
Profil: bas.
Posté le 17-09-2004 à 12:20:21  profilanswer
 

Burgergold a écrit :

le prof m'a dit de ne pas utiliser vector pour ce tp

Il est gentil. :cry:  
 
Tiens, une solution (pas forcément la plus efficace) parmi tant d'autres.  

Code :
  1. #include <algorithm>
  2. #include <iterator>
  3. #include <fstream>
  4. #include <sstream>
  5. int main()
  6. {
  7. std::ifstream in("input.txt" );
  8. std::stringstream out;
  9. std::copy(std::istreambuf_iterator<char>(in), 
  10.     std::istreambuf_iterator<char>(),
  11.    std::ostreambuf_iterator<char>(out));
  12. std::cout << out.str() << std::endl;
  13. }


n°852548
burgergold
5$? va chez l'diable!
Posté le 17-09-2004 à 12:35:12  profilanswer
 

Lam's a écrit :

Il est gentil. :cry:  
 
Tiens, une solution (pas forcément la plus efficace) parmi tant d'autres.  

Code :
  1. #include <algorithm>
  2. #include <iterator>
  3. #include <fstream>
  4. #include <sstream>
  5. int main()
  6. {
  7. std::ifstream in("input.txt" );
  8. std::stringstream out;
  9. std::copy(std::istreambuf_iterator<char>(in), 
  10.     std::istreambuf_iterator<char>(),
  11.    std::ostreambuf_iterator<char>(out));
  12. std::cout << out.str() << std::endl;
  13. }




 
dac gros merci, jvais comparer avec 2 lecture du fichier pour voir si ca améliore le tout (j'ose croire que oui)

n°852570
burgergold
5$? va chez l'diable!
Posté le 17-09-2004 à 13:12:52  profilanswer
 

ouch, la copy de la stream a l'air d'être vachement lourde, ca double la durée de l'exécution (26 secondes contre 13 pour un fichier de 50 000 segments)
 
j'vais donc resté avec la réouverture du fichier après avoir trouvé le nombre de segment
 
mais merci quand même, j'en demandais pas autant, jvoulais juste savoir si ca l'aurait pu accélérer

n°852623
Taz
bisounours-codeur
Posté le 17-09-2004 à 14:15:56  profilanswer
 

fais une recherche, j'ai déjà donné une méthode pour "copier" des streams.

n°852642
Lam's
Profil: bas.
Posté le 17-09-2004 à 14:30:17  profilanswer
 

Burgergold a écrit :

ouch, la copy de la stream a l'air d'être vachement lourde, ca double la durée de l'exécution (26 secondes contre 13 pour un fichier de 50 000 segments)
 
j'vais donc resté avec la réouverture du fichier après avoir trouvé le nombre de segment
 
mais merci quand même, j'en demandais pas autant, jvoulais juste savoir si ca l'aurait pu accélérer


 
C'est clair.  
 
J'aurais pu te le dire avant (mais c'est bien que tu patauges un peu), mais ceci réalise une copie caractère par caractère.  
 
Ca veut dire que ton stringstream va grossir incrémentalement, ce qui n'est pas du tout optimisé : ça va te causer log2 (N) réallocations mémoires, N étant la taille de ton fichier. En plus, la lecture sur fichier caractère par caractère est souvent pourrie dans les implémentations de iostreams qu'on a...
 
Pour optimiser ce code-ci, il faudrait implémenter tes propres streambufs etc. Bref, ça ira plus vite de chercher le bout de code dont Taz te parles...

n°852861
burgergold
5$? va chez l'diable!
Posté le 17-09-2004 à 19:13:27  profilanswer
 

bon bin jai vu le prof ce matin et ca ne lui dérange plus maintenant que j'utilise les vector pour faire ca, ca résout bien toutes mes dernières démarches :D

n°853143
el muchach​o
Comfortably Numb
Posté le 18-09-2004 à 12:58:52  profilanswer
 

Taz a écrit :

euh et pourquoi pas vector justement ?


 
Ben ça dépend de la taille des données en entrée et de l'application. Si il y en a pour des dizaines de Mo, il faut des blocs de RAM contigus sinon réallocations intempestives en cours de route. Dans ce cas, j'utiliserais plutôt un std:: deque.


Message édité par el muchacho le 18-09-2004 à 13:03:32
mood
Publicité
Posté le 18-09-2004 à 12:58:52  profilanswer
 

n°853196
Taz
bisounours-codeur
Posté le 18-09-2004 à 14:48:18  profilanswer
 

certes, tout dépend. Cela dit si ton allocateur est bien conçu, ça pose pas trop de problème

n°853529
notalone
je kif le c++
Posté le 19-09-2004 à 14:12:13  profilanswer
 

j aime pas iostream je trouve c le bordel avec
les namespace et l heritage multiple
je refai tjour ma class file c simplissime et ca pde 5 min


---------------
ici c ma signature j ai pas encore reflechi a ce que je vais mettre
n°853530
Taz
bisounours-codeur
Posté le 19-09-2004 à 14:13:34  profilanswer
 

'les namespace et l heritage multiple ' bin fait du C alors si tu ne maitrise pas ces concepts

n°853915
Joel F
Real men use unique_ptr
Posté le 20-09-2004 à 09:50:38  profilanswer
 

notalone a écrit :

j aime pas iostream je trouve c le bordel avec
les namespace et l heritage multiple
je refai tjour ma class file c simplissime et ca pde 5 min


 
[:autobot] Ben va faire du C
 
<merde grilled>

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Suivante

Aller à :
Ajouter une réponse
 

Sujets relatifs
Ecrire dans un fichier déjà existant sans écraser le contenu précédent[VBS] copie de fichier anterieur a 7 jours.
Ecrire dans un fichier dans un répertoire paramétrableFichier texte et retour à la ligne
[Batch] Modifier le fichier host ?[Javascript] Input File - Griser le textfield / Test sur le fichier
[java] modification fichier texteLecture tableau associatif complexe
[VISUAL C++] Le fichier MonAppli.rc peut-il être divisé.[C] : écriture dans un fichier linux
Plus de sujets relatifs à : [C++] Lecture de fichier


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)