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

  FORUM HardWare.fr
  Programmation
  C++

  [C++] Lire un fichier dans un string

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C++] Lire un fichier dans un string

n°716955
stoluup
Posté le 06-05-2004 à 08:45:35  profilanswer
 

Je cherche a lire un fichier dans un std::string sous VC++ 6.
 
J ai alors entrez le code suivant:
 

Code :
  1. std::ifstream in("toto.txt" );
  2. std:: string c ;
  3. std::copy( std::istream_iterator<char>(in)
  4. , std::istream_iterator<char>()
  5. , std::back_inserter(c) );


 
Mais alors, je ne comprend pas l' erreur de compilateur:
 
error C2039: 'push_back' : is not a member of 'basic_string<char,struct std::char_traits<char>,class std::allocator<char> >' ....
 
Je pense avoir mis les bons include (l' erreur semble pas venir de la)
Du coup , je bloque ...

mood
Publicité
Posté le 06-05-2004 à 08:45:35  profilanswer
 

n°716961
Taz
bisounours-codeur
Posté le 06-05-2004 à 08:55:09  profilanswer
 

ben la réponse elle est claire : une string n'a pas de push_back

n°716973
stoluup
Posté le 06-05-2004 à 09:02:03  profilanswer
 

Bon, comment j ecris dans le string alors?

n°716977
Taz
bisounours-codeur
Posté le 06-05-2004 à 09:05:04  profilanswer
 

ben tu écris pas. tu utilises un vector/deque<char> ou tu écris toi même une sorte de back_inserter pour string


Message édité par Taz le 06-05-2004 à 09:05:39
n°716986
stoluup
Posté le 06-05-2004 à 09:11:25  profilanswer
 

ok merci

n°717031
SoWhatIn22
Posté le 06-05-2004 à 10:06:32  profilanswer
 

que pensez vous d'un truc comme ça?

Code :
  1. #include <iostream>
  2. #include <string>
  3. #include <fstream>
  4. #include <sstream>
  5. using namespace std;
  6. int main(int argc, char *argv[])
  7. {
  8.         if(argc!=2)
  9.         {
  10.                 cout << "bad args" << endl;
  11.                 exit(1);
  12.         }
  13.         ifstream in(argv[1]);
  14.         if(!in)
  15.         {
  16.                 cout << "cannot open file " << argv[1] << endl;
  17.                 exit(0);
  18.         }
  19.         stringstream out;
  20.         out << in.rdbuf();
  21.         string content=out.str();
  22.         cout    << "content size: " << content.size() << endl
  23.                 << "content:"
  24.                 << content << endl;
  25. }


n°717043
Taz
bisounours-codeur
Posté le 06-05-2004 à 10:18:26  profilanswer
 

c'est pas mal
 
string content=out.str();  
 
mais arrêtez avec =
 
par contre, je planquerais le stringstream, histoire de pouvoir le purger dès que j'ai récupéré ma string

n°717104
stoluup
Posté le 06-05-2004 à 11:02:51  profilanswer
 

Bon j ai stocké mon fichier dans un vector<char> mais le probleme c est que j ai perdu tous les espaces et tabulations.
Z avez pas une idée pour eviter ca?

n°717170
xterminhat​e
Si vis pacem, para bellum.
Posté le 06-05-2004 à 11:50:12  profilanswer
 

J'aurais fait ca betement :

Code :
  1. std::ostringstream stream;
  2. std::string str;
  3. std::ifstream fichier( "nom_fichier.txt" );
  4. while( std::getline( fichier, str ) ) //--edit.
  5. stream << str << "\n";
  6. std::cout << stream.str();


Message édité par xterminhate le 06-05-2004 à 16:40:02

---------------
Cordialement, Xterm-in'Hate...
n°717235
stoluup
Posté le 06-05-2004 à 13:03:59  profilanswer
 

Ton prog marche bien.
En ce qui me concerne, j ai besoin de lire un gros fichier et les getline prennent beacoup de temp(18 sec).
Je voudrais pouvoir le lire en quasi instantanné

mood
Publicité
Posté le 06-05-2004 à 13:03:59  profilanswer
 

n°717278
Taz
bisounours-codeur
Posté le 06-05-2004 à 13:57:15  profilanswer
 

xterminhate a écrit :

J'aurais fait ca betement :
 
std::ostringstream stream;
std::string str;
std::ifstream fichier( "nom_fichier.txt" );
while( !std::getline( fichier, str ) .eof() )
stream << str << "\n";
std::cout << stream.str();
 

ça tu peux le dire, t'es con ...


Message édité par Taz le 06-05-2004 à 13:57:39
n°717299
SoWhatIn22
Posté le 06-05-2004 à 14:23:15  profilanswer
 

Stoluup a écrit :

Ton prog marche bien.
En ce qui me concerne, j ai besoin de lire un gros fichier et les getline prennent beacoup de temp(18 sec).
Je voudrais pouvoir le lire en quasi instantanné


et le type de solution que je t'ai donné plus haut ne te convient pas?

n°717301
Taz
bisounours-codeur
Posté le 06-05-2004 à 14:24:18  profilanswer
 

la solution rdbuf est bonne
sinon on peut tout simplement passer par un read

n°717306
stoluup
Posté le 06-05-2004 à 14:28:40  profilanswer
 

hé, en fait SoWhat, je la comprennait pas bien ta solution.
 
Et, au risque d' énerver tout le monde, je dois avouer que je bidouille pas mal sans trop connaitre la STL.
 
Un programme optimal, c' est qqch de nouveau pour moi

n°717365
xterminhat​e
Si vis pacem, para bellum.
Posté le 06-05-2004 à 15:09:53  profilanswer
 

En plus rapide...
 

Code :
  1. #include<string>
  2. #include<iostream>
  3. #include<sstream>
  4. #include<fstream>
  5. using namespace std;
  6. int main()
  7. {
  8. ifstream is ("nom_fichier.txt" );
  9. is.seekg (0, ios::end);
  10. int length( is.tellg() );
  11. is.seekg (0, ios::beg);
  12. char * buffer = new char [length];
  13. is.read (buffer,length);
  14. string str( buffer);
  15. delete[] buffer;
  16. cout << str;
  17. }


---------------
Cordialement, Xterm-in'Hate...
n°717368
xterminhat​e
Si vis pacem, para bellum.
Posté le 06-05-2004 à 15:12:25  profilanswer
 

Taz a écrit :

ça tu peux le dire, t'es con ...


Qu'est ce qui ne va pas ?


---------------
Cordialement, Xterm-in'Hate...
n°717371
stoluup
Posté le 06-05-2004 à 15:17:05  profilanswer
 

Bon SoWhatin22, ton prog est bien aussi.
Mais , il met quand même 16 secondes pour lire mon fichier.

n°717423
tckoullou
Posté le 06-05-2004 à 16:00:27  profilanswer
 

pour copier un fichier j'ai un code cour

n°717452
stoluup
Posté le 06-05-2004 à 16:22:19  profilanswer
 

En fait, je voulais lire le fichier dans un string pour pouvoir utiliser find et trouver un mot particulier.
Pour mon problème le mieux est en fait de ne pas lire le fichier dans un string:
 

Code :
  1. std::ifstream in("fichier.txt" );
  2. std::istream_iterator<string> Begin(in);
  3. std::istream_iterator<string> End;
  4. if (std::find(Begin, End, ToFind) != End)
  5. {cout<<"bon";}


Mais je suis tombé sur un nouveau problème:
Je dois recherché un mot des centaines de fois, et même avec find ça rame,...  mais bon ce problème a surement sa place dans un autre topic
 

n°717465
Taz
bisounours-codeur
Posté le 06-05-2004 à 16:28:38  profilanswer
 

xterminhate a écrit :

Qu'est ce qui ne va pas ?

tu te fous de qui avec ton eof ?

n°717482
xterminhat​e
Si vis pacem, para bellum.
Posté le 06-05-2004 à 16:39:11  profilanswer
 

Oui, c'est pas terrible en effet, probablement que sans eof() ce serait mieux.
 
Et je ne me fous de personne, loin de moi l'idée d'être aussi impoli que toi.


---------------
Cordialement, Xterm-in'Hate...
n°717488
Taz
bisounours-codeur
Posté le 06-05-2004 à 16:44:42  profilanswer
 

ben dès fois ça à se demander ... les stream ont tout pour être utilisé facilement, avec détection d'erreur, etc, tout à a été fait pour que tu puisses écrire
 
while(std::getline(std::cin, line))
 
et toi tu mets tout en l'air avec eof que tu ne sais même pas employer correctement ...

n°717491
xterminhat​e
Si vis pacem, para bellum.
Posté le 06-05-2004 à 16:47:34  profilanswer
 

C'est noté et j'espère réparé! :)


---------------
Cordialement, Xterm-in'Hate...
mood
Publicité
Posté le   profilanswer
 


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

  [C++] Lire un fichier dans un string

 

Sujets relatifs
[java]Efficacité pour la lecture d'un fichier texte --> Stringenvoit fichier reseau
fabriquer un fichier xlsExpression reguliere checker si un string est borne par ','
remplacer tous les accents d'un fichier donné[ASP.NET][C#]ecriture d'un fichier xml
Pb de recherche dans un fichierTester existance d'un fichier
execution de stringCrypter le mot de passe dans un fichier .htpasswd
Plus de sujets relatifs à : [C++] Lire un fichier dans un string


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