OVH Cloud OVH Cloud

manipulations du buffer?

6 réponses
Avatar
giovanni
voici un prog ok charge dans buffer me dit taile etc mais comment acceder
aubuffer li gne par ligne?
merci

#include <cstdlib>
#include <iostream>
#include <fstream>
#include <sstream>
using namespace std;


int main()
{
// le constructeur de ifstream permet d'ouvrir un fichier en lecture
std::ifstream fichier( "fichier.txt" );

if ( fichier ) // ce test échoue si le fichier n'est pas ouvert
{
std::stringstream buffer; // variable contenant l'intégralité du
fichier
// copier l'intégralité du fichier dans le buffer
buffer << fichier.rdbuf();
// nous n'avons plus besoin du fichier !
fichier.close();
// manipulations du buffer...
std::cout << "Taille du buffer : " << buffer.str().size() << '\n';

}
system("pause");
return(0);
}

6 réponses

Avatar
kanze
giovanni wrote:
voici un prog ok charge dans buffer me dit taile etc mais
comment acceder aubuffer li gne par ligne?


Une petite question : pourquoi est-ce que tu le charge d'un coup
dans un buffer si tu veux l'avoir ligne par ligne. À ta place,
j'aurais fais quelque chose du genre :

std::vector< std::string >
buffer ;
std::string line ;
while ( std::getline( fichier, line ) ) {
buffer.push_back( line ) ;
}

De cette façon, j'ai les lignes.

--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34

Avatar
giovanni
ah oui pas penser a ca et comment faire pour lire
une ligne dans le buffer pour la traiter?

exemple dans buffer ligne 1 : 45 85 95 74 45 54
ligne 2: 12 74 85 96 25 11
prendre le buffer de la ligne 1 chiffre separer 45 85 etc et comparer avec
ligne 2 etc


"kanze" a écrit dans le message de news:

giovanni wrote:
voici un prog ok charge dans buffer me dit taile etc mais
comment acceder aubuffer li gne par ligne?


Une petite question : pourquoi est-ce que tu le charge d'un coup
dans un buffer si tu veux l'avoir ligne par ligne. À ta place,
j'aurais fais quelque chose du genre :

std::vector< std::string >
buffer ;
std::string line ;
while ( std::getline( fichier, line ) ) {
buffer.push_back( line ) ;
}

De cette façon, j'ai les lignes.

--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34

Avatar
kanze
giovanni wrote:
ah oui pas penser a ca et comment faire pour lire
une ligne dans le buffer pour la traiter?

exemple dans buffer ligne 1 : 45 85 95 74 45 54
ligne 2: 12 74 85 96 25 11
prendre le buffer de la ligne 1 chiffre separer 45 85 etc et
comparer avec ligne 2 etc


Comparer quoi ? Les lignes entières, les valeurs ... ?

Il existe plusieurs possibilités d'exploiter les lignes par la
suite, selon les impératifs de l'application. Les deux les plus
courants sont d'initialiser un istringstream avec la ligne, et
de la lire, et d'utiliser boost::regex pour en extraire les
champs. Si toutes tes lignes comportent six champs entiers, on
pourrait bien faire quelque chose du genre :

std::vector< int > data ;
std::istringstream s( line ) ;
int tmp ;
while ( data.size() < 6 && s >> tmp ) {
data.push_back( tmp ) ;
}
if ( ! (s >> std::ws) || s.peek() != EOF ) {
// Erreur de format de la ligne...
}

Si toutes les lignes sont comme ça, on pourrait même le faire
lors de la lecture des lignes, et sauver les lignes dans un
std::vector< std::vector< int > >, plutôt que comme des chaînes
de caractères.

--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34

Avatar
giovanni
pourquoi sauver en vector plutot que les chaine ?

donc oui les valeur de chiffre dans la ligne je dois traiter.

"kanze" a écrit dans le message de news:

giovanni wrote:
ah oui pas penser a ca et comment faire pour lire
une ligne dans le buffer pour la traiter?

exemple dans buffer ligne 1 : 45 85 95 74 45 54
ligne 2: 12 74 85 96 25 11
prendre le buffer de la ligne 1 chiffre separer 45 85 etc et
comparer avec ligne 2 etc


Comparer quoi ? Les lignes entières, les valeurs ... ?

Il existe plusieurs possibilités d'exploiter les lignes par la
suite, selon les impératifs de l'application. Les deux les plus
courants sont d'initialiser un istringstream avec la ligne, et
de la lire, et d'utiliser boost::regex pour en extraire les
champs. Si toutes tes lignes comportent six champs entiers, on
pourrait bien faire quelque chose du genre :

std::vector< int > data ;
std::istringstream s( line ) ;
int tmp ;
while ( data.size() < 6 && s >> tmp ) {
data.push_back( tmp ) ;
}
if ( ! (s >> std::ws) || s.peek() != EOF ) {
// Erreur de format de la ligne...
}

Si toutes les lignes sont comme ça, on pourrait même le faire
lors de la lecture des lignes, et sauver les lignes dans un
std::vector< std::vector< int > >, plutôt que comme des chaînes
de caractères.

--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34

Avatar
kanze
giovanni wrote:
pourquoi sauver en vector plutot que les chaine ?


Ça dépend de l'application. Si en fin de compte, il te faut des
talbeaux d'entiers, autant les faire immédiatement lors de la
lecture, de façon à pouvoir donner une erreur tout de suite en
cas d'erreur de formattage. Si tu as besoin des données
textuelles par la suite, en revanche, il faut bien stocker les
chaînes.

--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34

Avatar
giovanni
ok merci je vais travailler un peu avec ca je verrais si j ai probleme bon
week end
"kanze" a écrit dans le message de news:

giovanni wrote:
pourquoi sauver en vector plutot que les chaine ?


Ça dépend de l'application. Si en fin de compte, il te faut des
talbeaux d'entiers, autant les faire immédiatement lors de la
lecture, de façon à pouvoir donner une erreur tout de suite en
cas d'erreur de formattage. Si tu as besoin des données
textuelles par la suite, en revanche, il faut bien stocker les
chaînes.

--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34