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

  FORUM HardWare.fr
  Programmation
  C++

  commande pour lire un string

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

commande pour lire un string

n°918989
damien90
Posté le 09-12-2004 à 17:25:56  profilanswer
 

Salut à tous,
je suis en train de me taper la tete contre les murs !!!
Y a t il une commande c++ toute simple permettant d'extraire un ligne d'un long string.
 
Je m'explique, j'ai mis un fichier txt en memoire (il fait plusieur milier de ligne) et je voudrais maintenant le scruter ligne par ligne.
Je l'ai placer dans une variable de type std::string.
 
Merci pour votre aide
a+

mood
Publicité
Posté le 09-12-2004 à 17:25:56  profilanswer
 

n°918995
bjone
Insert booze to continue
Posté le 09-12-2004 à 17:29:31  profilanswer
 

tu ouvres le fichier avec un ifstream, et tu fais un getline() dans une string....
 
par exemple:
http://www.softadvances.com/stl/if [...] ample.html

n°918997
damien90
Posté le 09-12-2004 à 17:30:47  profilanswer
 

oui mais non car je dois acceder des millier de fois à mes données, et c trop long comme ça!
C'est pour cela que je l'ai passe en memoire.

n°919007
bjone
Insert booze to continue
Posté le 09-12-2004 à 17:36:21  profilanswer
 

si tu as besoin de pouvoir accéder aux lignes par un index, tu peux faire un vector<string>, ou repérer le début et fin de ligne en faisant des find(), et mettre en vector<> une classe qui style:
class LineMarker
{
public:
   size_t Start,Length;
}
 
et pour accéder à une ligne, où tu feras un:
 
string LineTemp=StringFichier.substr( maligne.Start, maligne.Length ).
 
mais je serais plus pour un vector<string>. (indexage plus rapide, et possibilitée de modifier chaque ligne indépendamment sans se faire chier)
 
bref tu vois comme tu veux.


Message édité par bjone le 09-12-2004 à 17:38:02
n°919010
damien90
Posté le 09-12-2004 à 17:41:17  profilanswer
 

ouais alors attend, j'ai pas tt suivi !
moi j'ai un truc comme ça :
std::string info; //qui contient ttes les lignes de mon fichier
 
et ensuite pour acceder à la premiere ligne par ex je fais quoi ?

n°919039
bjone
Insert booze to continue
Posté le 09-12-2004 à 18:05:23  profilanswer
 

tu parses avec des find().
d'oû plustôt lire le fichier ligne par ligne, et mettre chaque ligne dans un vector<string>.

n°919776
ludo335421
et mon cul c'est du poulet
Posté le 10-12-2004 à 16:07:20  profilanswer
 

un string   :??:    :??:    :??:    :??:    :??:    :??:    :??:    :??:

n°919854
HelloWorld
Salut tout le monde!
Posté le 10-12-2004 à 17:26:38  profilanswer
 

Donc tu charges tout en mémoire, puis tu parcours tout le buffer à la recherche des lignes, puis tu extrais chaque ligne puis tu les stockes. T'es sûr que c'est beaucoup plus rapide qu'une lecture directe avec des getline ? Bosse en release et joue avec reserve().


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°963276
mastertnt
Posté le 26-01-2005 à 23:40:06  profilanswer
 

Tu utilises les strstream, c'est des buffers en memoire.
 
std::strstream TonStreamEnMemoire;
 
TonStreamEnMemoire<< TonBuffer;
 
char lLineBuffer[255];
TonStreamEnMemoire.getLine(lLineBuffer, 255);
 
Voila

n°963281
Lam's
Profil: bas.
Posté le 26-01-2005 à 23:43:41  profilanswer
 

Et il te faut pas un freeze() quelque part pour faire tourner ce code qui n'est (plus) du C++ ?
 
Il ne faut plus utiliser strstream (instable, un peu incompatible entre certaines implémentations, et compliqué à utiliser). Il faut utiliser stringstream de nos jours...
A part ça, joli up...

mood
Publicité
Posté le 26-01-2005 à 23:43:41  profilanswer
 

n°963282
Taz
bisounours-codeur
Posté le 26-01-2005 à 23:44:18  profilanswer
 

mastertnt a écrit :

Tu utilises les strstream, c'est des buffers en memoire.
 
std::strstream TonStreamEnMemoire;
 
TonStreamEnMemoire<< TonBuffer;
 
char lLineBuffer[255];
TonStreamEnMemoire.getLine(lLineBuffer, 255);
 
Voila


tu sors toi :o
 (t'as tout faux également)

n°963289
mastertnt
Posté le 26-01-2005 à 23:51:14  profilanswer
 

Non, faut pas de freeze pour que ca marche mais c vrai c plus chic d'utiliser les stringstream
 
Il est ou le probleme je dormirais moins con, Taz ???


Message édité par mastertnt le 27-01-2005 à 00:13:25
n°963291
Taz
bisounours-codeur
Posté le 26-01-2005 à 23:54:01  profilanswer
 

n'utilise ni strstream ni std::istream::getline mais std::stringstream et std::getline

n°963293
mastertnt
Posté le 26-01-2005 à 23:57:09  profilanswer
 

Ca n'empeche le code de marcher, c'est le but final non ?

n°963295
Taz
bisounours-codeur
Posté le 26-01-2005 à 23:58:34  profilanswer
 

ton code ne marche pas d'une part. D'autre part, les char* sont à proscrire.

n°963298
mastertnt
Posté le 27-01-2005 à 00:05:05  profilanswer
 

Ben si mon code marche je suis désolé pour toi. Sous Linux, je sais pas, j'ai pas testé ce que tu as fait probablement car ca sent le pingouino à plein nez mais sous Windows avec VC 7.1 ca marche nickel. si tu veux je t'envoie le code demain :)

n°963300
Lam's
Profil: bas.
Posté le 27-01-2005 à 00:07:36  profilanswer
 

Même en oubliant le std::ends comme tu l'as fait ?

n°963304
mastertnt
Posté le 27-01-2005 à 00:11:05  profilanswer
 

Affirmative, le pb de strstream avec std::ends et la mémoire n'apparait qu'avec la fonction str(), si je ne m'abuse


Message édité par mastertnt le 27-01-2005 à 00:14:26

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

  commande pour lire un string

 

Sujets relatifs
[C] Lire et afficher un pointeur générique[VBA Excel] Remplir 50 labels en une seule commande ? [résolu]
lire et écrire dans un fichier [résolu]Lire l'entête d'une table
Appeler un groupe de commandeLire dans un fichier texte
Lire un fichier ligne par ligne.Lire des données dans un programme (simulateur)
[Batch] commande pour afficher en plein écranPetite question simple sur une commande SQL
Plus de sujets relatifs à : commande pour lire un string


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