commande pour lire un string - C++ - Programmation
Marsh Posté le 09-12-2004 à 17:29:31
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
Marsh Posté le 09-12-2004 à 17:30:47
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.
Marsh Posté le 09-12-2004 à 17:36:21
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.
Marsh Posté le 09-12-2004 à 17:41:17
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 ?
Marsh Posté le 09-12-2004 à 18:05:23
tu parses avec des find().
d'oû plustôt lire le fichier ligne par ligne, et mettre chaque ligne dans un vector<string>.
Marsh Posté le 10-12-2004 à 17:26:38
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().
Marsh Posté le 26-01-2005 à 23:40:06
Tu utilises les strstream, c'est des buffers en memoire.
std::strstream TonStreamEnMemoire;
TonStreamEnMemoire<< TonBuffer;
char lLineBuffer[255];
TonStreamEnMemoire.getLine(lLineBuffer, 255);
Voila
Marsh Posté le 26-01-2005 à 23:43:41
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...
Marsh Posté le 26-01-2005 à 23:44:18
mastertnt a écrit : Tu utilises les strstream, c'est des buffers en memoire. |
tu sors toi
(t'as tout faux également)
Marsh Posté le 26-01-2005 à 23:51:14
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 ???
Marsh Posté le 26-01-2005 à 23:54:01
n'utilise ni strstream ni std::istream::getline mais std::stringstream et std::getline
Marsh Posté le 26-01-2005 à 23:57:09
Ca n'empeche le code de marcher, c'est le but final non ?
Marsh Posté le 26-01-2005 à 23:58:34
ton code ne marche pas d'une part. D'autre part, les char* sont à proscrire.
Marsh Posté le 27-01-2005 à 00:05:05
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
Marsh Posté le 27-01-2005 à 00:11:05
Affirmative, le pb de strstream avec std::ends et la mémoire n'apparait qu'avec la fonction str(), si je ne m'abuse
Marsh Posté le 09-12-2004 à 17:25:56
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+