comment faire pour traiter ce buffer ligne par ligne recuperer les donnée
ligne par ligne?#include <fstream>
#include <iostream>
#include <sstream>
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
Sylvain
giovanni wrote on 14/05/2006 22:05:
comment faire pour traiter ce buffer ligne par ligne recuperer les donnée ligne par ligne?
tu veux dire comment redécomposer ligne à ligne un énorme buffer composé depuis un fichier qui était un ensemble de lignes (mais que l'on a ainsi mis dans un gros buffer au risque de ne pouvoir le lire) ??
c'est une bonne question, mais je préfèrerais faire un traitement direct via fgets, puis scanf si les lignes contiennent des données formattées (ou directement fscanf).
Sylvain.
giovanni wrote on 14/05/2006 22:05:
comment faire pour traiter ce buffer ligne par ligne recuperer les donnée
ligne par ligne?
tu veux dire comment redécomposer ligne à ligne un énorme buffer composé
depuis un fichier qui était un ensemble de lignes (mais que l'on a ainsi
mis dans un gros buffer au risque de ne pouvoir le lire) ??
c'est une bonne question, mais je préfèrerais faire un traitement direct
via fgets, puis scanf si les lignes contiennent des données formattées
(ou directement fscanf).
comment faire pour traiter ce buffer ligne par ligne recuperer les donnée ligne par ligne?
tu veux dire comment redécomposer ligne à ligne un énorme buffer composé depuis un fichier qui était un ensemble de lignes (mais que l'on a ainsi mis dans un gros buffer au risque de ne pouvoir le lire) ??
c'est une bonne question, mais je préfèrerais faire un traitement direct via fgets, puis scanf si les lignes contiennent des données formattées (ou directement fscanf).
Sylvain.
giovanni
ah ok peu tu me faire un petit exemple? "Sylvain" a écrit dans le message de news: 446792f0$0$21275$
giovanni wrote on 14/05/2006 22:05:
comment faire pour traiter ce buffer ligne par ligne recuperer les donnée ligne par ligne?
tu veux dire comment redécomposer ligne à ligne un énorme buffer composé depuis un fichier qui était un ensemble de lignes (mais que l'on a ainsi mis dans un gros buffer au risque de ne pouvoir le lire) ??
c'est une bonne question, mais je préfèrerais faire un traitement direct via fgets, puis scanf si les lignes contiennent des données formattées (ou directement fscanf).
Sylvain.
ah ok peu tu me faire un petit exemple?
"Sylvain" <noSpam@mail.net> a écrit dans le message de news:
446792f0$0$21275$8fcfb975@news.wanadoo.fr...
giovanni wrote on 14/05/2006 22:05:
comment faire pour traiter ce buffer ligne par ligne recuperer les donnée
ligne par ligne?
tu veux dire comment redécomposer ligne à ligne un énorme buffer composé
depuis un fichier qui était un ensemble de lignes (mais que l'on a ainsi
mis dans un gros buffer au risque de ne pouvoir le lire) ??
c'est une bonne question, mais je préfèrerais faire un traitement direct
via fgets, puis scanf si les lignes contiennent des données formattées (ou
directement fscanf).
ah ok peu tu me faire un petit exemple? "Sylvain" a écrit dans le message de news: 446792f0$0$21275$
giovanni wrote on 14/05/2006 22:05:
comment faire pour traiter ce buffer ligne par ligne recuperer les donnée ligne par ligne?
tu veux dire comment redécomposer ligne à ligne un énorme buffer composé depuis un fichier qui était un ensemble de lignes (mais que l'on a ainsi mis dans un gros buffer au risque de ne pouvoir le lire) ??
c'est une bonne question, mais je préfèrerais faire un traitement direct via fgets, puis scanf si les lignes contiennent des données formattées (ou directement fscanf).
Sylvain.
Sylvain
giovanni wrote on 14/05/2006 23:28:
ah ok peu tu me faire un petit exemple?
faire un exemple hors définition d'un besoin est simple mais je crains non pertinant!
si j'imagine le fichier texte source suivant:
1 3.14 toto 3 2 6.28 tata 5 3 9.72 titi 12
alors le code suivant lira ces données
FILE* source = ::fopen("fichier.txt", "rt"); if (source){ char buffer[256]; while (::fgets(buffer, 256, source)){ int a, b; double d; char s[64]; if (sscanf(buffer, "%it%lgt%st%i", &a, &d, s, &b) == 4){ // process read data } } } ::fclose(source);
cette approche est pragmatique si vous n'avez à traiter que d'un fichier simple, mais elle est aussi archaïque et manque de souplesse.
on souhaiterait plus qlq chose comme:
std::ifstream fichier( "fichier.txt" ); std::stringstream line; int a, b; std::string s; double d; while (fichier.getNextLine(line /*, eol_token */)) line >> a >> d >> s >> b;
mais je ne trouve aucun get line (basé sur un token EOL et non une taille max) dans istream.
une solution pourrait être d'étendre ifstream pour lui ajouter cela, ie un ifstream& operator>> (ifstream& ifs, istream& is); qui gérerait les tokens usuels de fin de ligne (r, n, rn).
Sylvain.
giovanni wrote on 14/05/2006 23:28:
ah ok peu tu me faire un petit exemple?
faire un exemple hors définition d'un besoin est simple mais je crains
non pertinant!
si j'imagine le fichier texte source suivant:
1 3.14 toto 3
2 6.28 tata 5
3 9.72 titi 12
alors le code suivant lira ces données
FILE* source = ::fopen("fichier.txt", "rt");
if (source){
char buffer[256];
while (::fgets(buffer, 256, source)){
int a, b;
double d;
char s[64];
if (sscanf(buffer, "%it%lgt%st%i", &a, &d, s, &b) == 4){
// process read data
}
}
}
::fclose(source);
cette approche est pragmatique si vous n'avez à traiter que d'un fichier
simple, mais elle est aussi archaïque et manque de souplesse.
on souhaiterait plus qlq chose comme:
std::ifstream fichier( "fichier.txt" );
std::stringstream line;
int a, b;
std::string s;
double d;
while (fichier.getNextLine(line /*, eol_token */))
line >> a >> d >> s >> b;
mais je ne trouve aucun get line (basé sur un token EOL et non une
taille max) dans istream.
une solution pourrait être d'étendre ifstream pour lui ajouter cela, ie
un ifstream& operator>> (ifstream& ifs, istream& is); qui gérerait les
tokens usuels de fin de ligne (r, n, rn).
faire un exemple hors définition d'un besoin est simple mais je crains non pertinant!
si j'imagine le fichier texte source suivant:
1 3.14 toto 3 2 6.28 tata 5 3 9.72 titi 12
alors le code suivant lira ces données
FILE* source = ::fopen("fichier.txt", "rt"); if (source){ char buffer[256]; while (::fgets(buffer, 256, source)){ int a, b; double d; char s[64]; if (sscanf(buffer, "%it%lgt%st%i", &a, &d, s, &b) == 4){ // process read data } } } ::fclose(source);
cette approche est pragmatique si vous n'avez à traiter que d'un fichier simple, mais elle est aussi archaïque et manque de souplesse.
on souhaiterait plus qlq chose comme:
std::ifstream fichier( "fichier.txt" ); std::stringstream line; int a, b; std::string s; double d; while (fichier.getNextLine(line /*, eol_token */)) line >> a >> d >> s >> b;
mais je ne trouve aucun get line (basé sur un token EOL et non une taille max) dans istream.
une solution pourrait être d'étendre ifstream pour lui ajouter cela, ie un ifstream& operator>> (ifstream& ifs, istream& is); qui gérerait les tokens usuels de fin de ligne (r, n, rn).
Sylvain.
Loïc Joly
std::ifstream fichier( "fichier.txt" ); std::stringstream line; int a, b; std::string s; double d; while (fichier.getNextLine(line /*, eol_token */)) line >> a >> d >> s >> b;
std::ifstream fichier( "fichier.txt" ); std::string s; while (std::getline(fichier, string)) { // Faire quelquechose avec s }
-- Loïc
std::ifstream fichier( "fichier.txt" );
std::stringstream line;
int a, b;
std::string s;
double d;
while (fichier.getNextLine(line /*, eol_token */))
line >> a >> d >> s >> b;
std::ifstream fichier( "fichier.txt" );
std::string s;
while (std::getline(fichier, string))
{
// Faire quelquechose avec s
}
std::ifstream fichier( "fichier.txt" ); std::stringstream line; int a, b; std::string s; double d; while (fichier.getNextLine(line /*, eol_token */)) line >> a >> d >> s >> b;
std::ifstream fichier( "fichier.txt" ); std::string s; while (std::getline(fichier, string)) { // Faire quelquechose avec s }
-- Loïc
giovanni
ok mais ne sachant pas la taille du fichier ni le nombre de ligne comment defnir buffer infini.... alieu de 256 ? "Loïc Joly" a écrit dans le message de news: 4467cb39$0$166$
std::ifstream fichier( "fichier.txt" ); std::stringstream line; int a, b; std::string s; double d; while (fichier.getNextLine(line /*, eol_token */)) line >> a >> d >> s >> b;
std::ifstream fichier( "fichier.txt" ); std::string s; while (std::getline(fichier, string)) { // Faire quelquechose avec s }
-- Loïc
ok mais ne sachant pas la taille du fichier ni le nombre de ligne comment
defnir buffer infini.... alieu de 256 ?
"Loïc Joly" <loic.actarus.joly@numericable.fr> a écrit dans le message de
news: 4467cb39$0$166$a3f2974a@nnrp1.numericable.fr...
std::ifstream fichier( "fichier.txt" );
std::stringstream line;
int a, b;
std::string s;
double d;
while (fichier.getNextLine(line /*, eol_token */))
line >> a >> d >> s >> b;
std::ifstream fichier( "fichier.txt" );
std::string s;
while (std::getline(fichier, string))
{
// Faire quelquechose avec s
}
ok mais ne sachant pas la taille du fichier ni le nombre de ligne comment defnir buffer infini.... alieu de 256 ? "Loïc Joly" a écrit dans le message de news: 4467cb39$0$166$
std::ifstream fichier( "fichier.txt" ); std::stringstream line; int a, b; std::string s; double d; while (fichier.getNextLine(line /*, eol_token */)) line >> a >> d >> s >> b;
std::ifstream fichier( "fichier.txt" ); std::string s; while (std::getline(fichier, string)) { // Faire quelquechose avec s }
-- Loïc
Loïc Joly
ok mais ne sachant pas la taille du fichier ni le nombre de ligne comment defnir buffer infini.... alieu de 256 ? "Loïc Joly" a écrit dans le message de news: 4467cb39$0$166$
std::ifstream fichier( "fichier.txt" ); std::stringstream line; int a, b; std::string s; double d; while (fichier.getNextLine(line /*, eol_token */)) line >> a >> d >> s >> b;
std::ifstream fichier( "fichier.txt" ); std::string s; while (std::getline(fichier, string)) { // Faire quelquechose avec s }
Où vois-tu un buffer ? Où vois tu 256 ? Mon code lit directement un fichier, quel que soit sa taille, et le traite ligne par ligne.
-- Loïc
ok mais ne sachant pas la taille du fichier ni le nombre de ligne comment
defnir buffer infini.... alieu de 256 ?
"Loïc Joly" <loic.actarus.joly@numericable.fr> a écrit dans le message de
news: 4467cb39$0$166$a3f2974a@nnrp1.numericable.fr...
std::ifstream fichier( "fichier.txt" );
std::stringstream line;
int a, b;
std::string s;
double d;
while (fichier.getNextLine(line /*, eol_token */))
line >> a >> d >> s >> b;
std::ifstream fichier( "fichier.txt" );
std::string s;
while (std::getline(fichier, string))
{
// Faire quelquechose avec s
}
Où vois-tu un buffer ? Où vois tu 256 ? Mon code lit directement un
fichier, quel que soit sa taille, et le traite ligne par ligne.
ok mais ne sachant pas la taille du fichier ni le nombre de ligne comment defnir buffer infini.... alieu de 256 ? "Loïc Joly" a écrit dans le message de news: 4467cb39$0$166$
std::ifstream fichier( "fichier.txt" ); std::stringstream line; int a, b; std::string s; double d; while (fichier.getNextLine(line /*, eol_token */)) line >> a >> d >> s >> b;
std::ifstream fichier( "fichier.txt" ); std::string s; while (std::getline(fichier, string)) { // Faire quelquechose avec s }
Où vois-tu un buffer ? Où vois tu 256 ? Mon code lit directement un fichier, quel que soit sa taille, et le traite ligne par ligne.