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';
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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
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
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
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
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" <kanze@gabi-soft.fr> a écrit dans le message de news:
1145432024.495026.79830@v46g2000cwv.googlegroups.com...
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
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
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
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
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
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
pourquoi sauver en vector plutot que les chaine ?
donc oui les valeur de chiffre dans la ligne je dois traiter.
"kanze" <kanze@gabi-soft.fr> a écrit dans le message de news:
1145517635.981454.71210@u72g2000cwu.googlegroups.com...
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
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
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
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
Ç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
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
ok merci je vais travailler un peu avec ca je verrais si j ai probleme bon
week end
"kanze" <kanze@gabi-soft.fr> a écrit dans le message de news:
1145543608.995017.109050@v46g2000cwv.googlegroups.com...
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
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