j'essaie de faire un parser de fichier. J'utilise istringstream car je
trouve ca super pratique et simple. Mais j'ai un petit probleme. J'ai
un fichier qui contient des lignes remplis de double. Chaque valeur
est separee de la suivante par un tab:
<valeur1><tab><valeur2><tab><valeur3><tab><valeur4><tab><valeur5><tab>...
Si je fais
getline(inputfile, line);
std::istringstream in(line);
in>>v1>>v2>>v3>>v4>>v5;
ca marche.... normal...
Cependant, il arrive que parfois, certaines valeurs ne soient pas
renseignees. Du coup, j'ai un truc comme:
<valeur1><tab><tab><tab><valeur4><tab><valeur5><tab>...
du coup, si je fais la meme chose:
in>>v1>>v2>>v3>>v4>>v5;
Bah ca marche plus.... normal car il ignore les tabs.... Comment me
debrouiller pour que v2 et v3 aient une valeur par defaut (0) plutot
que les valeurs qui normalement devraient etre assignees a v4 et v5 ?
j'essaie de faire un parser de fichier. J'utilise istringstream car je
trouve ca super pratique et simple. Mais j'ai un petit probleme. J'ai
un fichier qui contient des lignes remplis de double. Chaque valeur
est separee de la suivante par un tab:
<valeur1><tab><valeur2><tab><valeur3><tab><valeur4><tab><valeur5><tab>...
Si je fais
getline(inputfile, line);
std::istringstream in(line);
in>>v1>>v2>>v3>>v4>>v5;
ca marche.... normal...
Cependant, il arrive que parfois, certaines valeurs ne soient pas
renseignees. Du coup, j'ai un truc comme:
<valeur1><tab><tab><tab><valeur4><tab><valeur5><tab>...
du coup, si je fais la meme chose:
in>>v1>>v2>>v3>>v4>>v5;
Bah ca marche plus.... normal car il ignore les tabs.... Comment me
debrouiller pour que v2 et v3 aient une valeur par defaut (0) plutot
que les valeurs qui normalement devraient etre assignees a v4 et v5 ?
j'essaie de faire un parser de fichier. J'utilise istringstream car je
trouve ca super pratique et simple. Mais j'ai un petit probleme. J'ai
un fichier qui contient des lignes remplis de double. Chaque valeur
est separee de la suivante par un tab:
<valeur1><tab><valeur2><tab><valeur3><tab><valeur4><tab><valeur5><tab>...
Si je fais
getline(inputfile, line);
std::istringstream in(line);
in>>v1>>v2>>v3>>v4>>v5;
ca marche.... normal...
Cependant, il arrive que parfois, certaines valeurs ne soient pas
renseignees. Du coup, j'ai un truc comme:
<valeur1><tab><tab><tab><valeur4><tab><valeur5><tab>...
du coup, si je fais la meme chose:
in>>v1>>v2>>v3>>v4>>v5;
Bah ca marche plus.... normal car il ignore les tabs.... Comment me
debrouiller pour que v2 et v3 aient une valeur par defaut (0) plutot
que les valeurs qui normalement devraient etre assignees a v4 et v5 ?
j'essaie de faire un parser de fichier. J'utilise istringstream car je
trouve ca super pratique et simple. Mais j'ai un petit probleme. J'ai
un fichier qui contient des lignes remplis de double. Chaque valeur
est separee de la suivante par un tab:
<valeur1><tab><valeur2><tab><valeur3><tab><valeur4><tab><valeur5><tab>...
Si je fais
getline(inputfile, line);
std::istringstream in(line);
in>>v1>>v2>>v3>>v4>>v5;
ca marche.... normal...
Cependant, il arrive que parfois, certaines valeurs ne soient pas
renseignees. Du coup, j'ai un truc comme:
<valeur1><tab><tab><tab><valeur4><tab><valeur5><tab>...
du coup, si je fais la meme chose:
in>>v1>>v2>>v3>>v4>>v5;
Bah ca marche plus.... normal car il ignore les tabs.... Comment me
debrouiller pour que v2 et v3 aient une valeur par defaut (0) plutot
que les valeurs qui normalement devraient etre assignees a v4 et v5 ?
j'essaie de faire un parser de fichier. J'utilise istringstream car je
trouve ca super pratique et simple. Mais j'ai un petit probleme. J'ai
un fichier qui contient des lignes remplis de double. Chaque valeur
est separee de la suivante par un tab:
<valeur1><tab><valeur2><tab><valeur3><tab><valeur4><tab><valeur5><tab>...
Si je fais
getline(inputfile, line);
std::istringstream in(line);
in>>v1>>v2>>v3>>v4>>v5;
ca marche.... normal...
Cependant, il arrive que parfois, certaines valeurs ne soient pas
renseignees. Du coup, j'ai un truc comme:
<valeur1><tab><tab><tab><valeur4><tab><valeur5><tab>...
du coup, si je fais la meme chose:
in>>v1>>v2>>v3>>v4>>v5;
Bah ca marche plus.... normal car il ignore les tabs.... Comment me
debrouiller pour que v2 et v3 aient une valeur par defaut (0) plutot
que les valeurs qui normalement devraient etre assignees a v4 et v5 ?
j'essaie de faire un parser de fichier. J'utilise istringstream car je
trouve ca super pratique et simple. Mais j'ai un petit probleme. J'ai
un fichier qui contient des lignes remplis de double. Chaque valeur
est separee de la suivante par un tab:
<valeur1><tab><valeur2><tab><valeur3><tab><valeur4><tab><valeur5><tab>...
Si je fais
getline(inputfile, line);
std::istringstream in(line);
in>>v1>>v2>>v3>>v4>>v5;
ca marche.... normal...
Cependant, il arrive que parfois, certaines valeurs ne soient pas
renseignees. Du coup, j'ai un truc comme:
<valeur1><tab><tab><tab><valeur4><tab><valeur5><tab>...
du coup, si je fais la meme chose:
in>>v1>>v2>>v3>>v4>>v5;
Bah ca marche plus.... normal car il ignore les tabs.... Comment me
debrouiller pour que v2 et v3 aient une valeur par defaut (0) plutot
que les valeurs qui normalement devraient etre assignees a v4 et v5 ?
Bonjour,
j'essaie de faire un parser de fichier. J'utilise istringstream car je
trouve ca super pratique et simple. Mais j'ai un petit probleme. J'ai
un fichier qui contient des lignes remplis de double. Chaque valeur
est separee de la suivante par un tab:
<valeur1><tab><valeur2><tab><valeur3><tab><valeur4><tab><valeur5><tab>...
Si je fais
getline(inputfile, line);
std::istringstream in(line);
ca marche.... normal...
Cependant, il arrive que parfois, certaines valeurs ne soient pas
renseignees. Du coup, j'ai un truc comme:
<valeur1><tab><tab><tab><valeur4><tab><valeur5><tab>...
du coup, si je fais la meme chose:
in>>v1>>v2>>v3>>v4>>v5;
Bah ca marche plus.... normal car il ignore les tabs.... Comment me
debrouiller pour que v2 et v3 aient une valeur par defaut (0) plutot
que les valeurs qui normalement devraient etre assignees a v4 et v5 ?
Bonjour,
j'essaie de faire un parser de fichier. J'utilise istringstream car je
trouve ca super pratique et simple. Mais j'ai un petit probleme. J'ai
un fichier qui contient des lignes remplis de double. Chaque valeur
est separee de la suivante par un tab:
<valeur1><tab><valeur2><tab><valeur3><tab><valeur4><tab><valeur5><tab>...
Si je fais
getline(inputfile, line);
std::istringstream in(line);
ca marche.... normal...
Cependant, il arrive que parfois, certaines valeurs ne soient pas
renseignees. Du coup, j'ai un truc comme:
<valeur1><tab><tab><tab><valeur4><tab><valeur5><tab>...
du coup, si je fais la meme chose:
in>>v1>>v2>>v3>>v4>>v5;
Bah ca marche plus.... normal car il ignore les tabs.... Comment me
debrouiller pour que v2 et v3 aient une valeur par defaut (0) plutot
que les valeurs qui normalement devraient etre assignees a v4 et v5 ?
Bonjour,
j'essaie de faire un parser de fichier. J'utilise istringstream car je
trouve ca super pratique et simple. Mais j'ai un petit probleme. J'ai
un fichier qui contient des lignes remplis de double. Chaque valeur
est separee de la suivante par un tab:
<valeur1><tab><valeur2><tab><valeur3><tab><valeur4><tab><valeur5><tab>...
Si je fais
getline(inputfile, line);
std::istringstream in(line);
ca marche.... normal...
Cependant, il arrive que parfois, certaines valeurs ne soient pas
renseignees. Du coup, j'ai un truc comme:
<valeur1><tab><tab><tab><valeur4><tab><valeur5><tab>...
du coup, si je fais la meme chose:
in>>v1>>v2>>v3>>v4>>v5;
Bah ca marche plus.... normal car il ignore les tabs.... Comment me
debrouiller pour que v2 et v3 aient une valeur par defaut (0) plutot
que les valeurs qui normalement devraient etre assignees a v4 et v5 ?
Korchkidu wrote:j'essaie de faire un parser de fichier. J'utilise istringstream car je
trouve ca super pratique et simple. Mais j'ai un petit probleme. J'ai
un fichier qui contient des lignes remplis de double. Chaque valeur
est separee de la suivante par un tab:
<valeur1><tab><valeur2><tab><valeur3><tab><valeur4><tab><valeur5><tab>. ..
Si je fais
getline(inputfile, line);
std::istringstream in(line);
Et si tu utilises:
in.noskipws();
ca marche.... normal...
Cependant, il arrive que parfois, certaines valeurs ne soient pas
renseignees. Du coup, j'ai un truc comme:
<valeur1><tab><tab><tab><valeur4><tab><valeur5><tab>...
du coup, si je fais la meme chose:
in>>v1>>v2>>v3>>v4>>v5;
avec
in>>v1>>c1>>v2>>c2>>v3>>c3>>v4>>c4>>v5>>c5;
Korchkidu wrote:
j'essaie de faire un parser de fichier. J'utilise istringstream car je
trouve ca super pratique et simple. Mais j'ai un petit probleme. J'ai
un fichier qui contient des lignes remplis de double. Chaque valeur
est separee de la suivante par un tab:
<valeur1><tab><valeur2><tab><valeur3><tab><valeur4><tab><valeur5><tab>. ..
Si je fais
getline(inputfile, line);
std::istringstream in(line);
Et si tu utilises:
in.noskipws();
ca marche.... normal...
Cependant, il arrive que parfois, certaines valeurs ne soient pas
renseignees. Du coup, j'ai un truc comme:
<valeur1><tab><tab><tab><valeur4><tab><valeur5><tab>...
du coup, si je fais la meme chose:
in>>v1>>v2>>v3>>v4>>v5;
avec
in>>v1>>c1>>v2>>c2>>v3>>c3>>v4>>c4>>v5>>c5;
Korchkidu wrote:j'essaie de faire un parser de fichier. J'utilise istringstream car je
trouve ca super pratique et simple. Mais j'ai un petit probleme. J'ai
un fichier qui contient des lignes remplis de double. Chaque valeur
est separee de la suivante par un tab:
<valeur1><tab><valeur2><tab><valeur3><tab><valeur4><tab><valeur5><tab>. ..
Si je fais
getline(inputfile, line);
std::istringstream in(line);
Et si tu utilises:
in.noskipws();
ca marche.... normal...
Cependant, il arrive que parfois, certaines valeurs ne soient pas
renseignees. Du coup, j'ai un truc comme:
<valeur1><tab><tab><tab><valeur4><tab><valeur5><tab>...
du coup, si je fais la meme chose:
in>>v1>>v2>>v3>>v4>>v5;
avec
in>>v1>>c1>>v2>>c2>>v3>>c3>>v4>>c4>>v5>>c5;
Cependant, il arrive que parfois, certaines valeurs ne soient pas
renseignees. Du coup, j'ai un truc comme:
<valeur1><tab><tab><tab><valeur4><tab><valeur5><tab>...
du coup, si je fais la meme chose:
in>>v1>>v2>>v3>>v4>>v5;
avec
in>>v1>>c1>>v2>>c2>>v3>>c3>>v4>>c4>>v5>>c5;
Et que se passe-t-il s'il a un champs qui manque ? Du coup, le
flux se met en erreur, il ne lit pas les valeurs suivantes, et
on ne peut même pas savoir combien de champs il a lu.
Cependant, il arrive que parfois, certaines valeurs ne soient pas
renseignees. Du coup, j'ai un truc comme:
<valeur1><tab><tab><tab><valeur4><tab><valeur5><tab>...
du coup, si je fais la meme chose:
in>>v1>>v2>>v3>>v4>>v5;
avec
in>>v1>>c1>>v2>>c2>>v3>>c3>>v4>>c4>>v5>>c5;
Et que se passe-t-il s'il a un champs qui manque ? Du coup, le
flux se met en erreur, il ne lit pas les valeurs suivantes, et
on ne peut même pas savoir combien de champs il a lu.
Cependant, il arrive que parfois, certaines valeurs ne soient pas
renseignees. Du coup, j'ai un truc comme:
<valeur1><tab><tab><tab><valeur4><tab><valeur5><tab>...
du coup, si je fais la meme chose:
in>>v1>>v2>>v3>>v4>>v5;
avec
in>>v1>>c1>>v2>>c2>>v3>>c3>>v4>>c4>>v5>>c5;
Et que se passe-t-il s'il a un champs qui manque ? Du coup, le
flux se met en erreur, il ne lit pas les valeurs suivantes, et
on ne peut même pas savoir combien de champs il a lu.
James Kanze wrote on 27/04/2007 18:46:Cependant, il arrive que parfois, certaines valeurs ne soient pas
renseignees. Du coup, j'ai un truc comme:
<valeur1><tab><tab><tab><valeur4><tab><valeur5><tab>...
du coup, si je fais la meme chose:
in>>v1>>v2>>v3>>v4>>v5;
avec
in>>v1>>c1>>v2>>c2>>v3>>c3>>v4>>c4>>v5>>c5;
Et que se passe-t-il s'il a un champs qui manque ? Du coup, le
flux se met en erreur, il ne lit pas les valeurs suivantes, et
on ne peut même pas savoir combien de champs il a lu.
un opérateur istringstream& >> (istringstream&, double&)
qui testerait
si un et un seul caractère séparateur est présent avant un nombre v alide
et qui affecterait au double opérande une valeur par défaut si cette
condition n'est pas vérifiée pourrait donner l'impression de marcher -
il faudra à tout le moins que l'extracteur ne consomme qu'un séparate ur
et puisse tester sans le consommer le caractère suivant du flux.
extraire séparément les séparateurs n'apporte rien et
empêchera plutôt le traitement par perte de l'information "2
séparateurs consécutifs".
James Kanze wrote on 27/04/2007 18:46:
Cependant, il arrive que parfois, certaines valeurs ne soient pas
renseignees. Du coup, j'ai un truc comme:
<valeur1><tab><tab><tab><valeur4><tab><valeur5><tab>...
du coup, si je fais la meme chose:
in>>v1>>v2>>v3>>v4>>v5;
avec
in>>v1>>c1>>v2>>c2>>v3>>c3>>v4>>c4>>v5>>c5;
Et que se passe-t-il s'il a un champs qui manque ? Du coup, le
flux se met en erreur, il ne lit pas les valeurs suivantes, et
on ne peut même pas savoir combien de champs il a lu.
un opérateur istringstream& >> (istringstream&, double&)
qui testerait
si un et un seul caractère séparateur est présent avant un nombre v alide
et qui affecterait au double opérande une valeur par défaut si cette
condition n'est pas vérifiée pourrait donner l'impression de marcher -
il faudra à tout le moins que l'extracteur ne consomme qu'un séparate ur
et puisse tester sans le consommer le caractère suivant du flux.
extraire séparément les séparateurs n'apporte rien et
empêchera plutôt le traitement par perte de l'information "2
séparateurs consécutifs".
James Kanze wrote on 27/04/2007 18:46:Cependant, il arrive que parfois, certaines valeurs ne soient pas
renseignees. Du coup, j'ai un truc comme:
<valeur1><tab><tab><tab><valeur4><tab><valeur5><tab>...
du coup, si je fais la meme chose:
in>>v1>>v2>>v3>>v4>>v5;
avec
in>>v1>>c1>>v2>>c2>>v3>>c3>>v4>>c4>>v5>>c5;
Et que se passe-t-il s'il a un champs qui manque ? Du coup, le
flux se met en erreur, il ne lit pas les valeurs suivantes, et
on ne peut même pas savoir combien de champs il a lu.
un opérateur istringstream& >> (istringstream&, double&)
qui testerait
si un et un seul caractère séparateur est présent avant un nombre v alide
et qui affecterait au double opérande une valeur par défaut si cette
condition n'est pas vérifiée pourrait donner l'impression de marcher -
il faudra à tout le moins que l'extracteur ne consomme qu'un séparate ur
et puisse tester sans le consommer le caractère suivant du flux.
extraire séparément les séparateurs n'apporte rien et
empêchera plutôt le traitement par perte de l'information "2
séparateurs consécutifs".
un opérateur istringstream& >> (istringstream&, double&)
Existe déjà. Il faut utiliser un type proxy autour de
double :
un opérateur istringstream& >> (istringstream&, double&)
Existe déjà. Il faut utiliser un type proxy autour de
double :
un opérateur istringstream& >> (istringstream&, double&)
Existe déjà. Il faut utiliser un type proxy autour de
double :
un opérateur istringstream& >> (istringstream&, double&)
Existe déjà. Il faut utiliser un type proxy autour de
double :
C'est exact. Il pourrait donner l'air de marcher s'il marche.
En fait, il ne serait pas trop difficile de l'écrire :
std::istream&
operator>>( std::istream& source,
DelimitedDouble const& destProxy )
{
if ( source.peek() == 't' ) {
source.get() ;
destProxy = 0.0L ;
} else {
double tmp ;
source >> tmp ;
if ( source ) {
destProxy = tmp ;
}
}
return *this ;
}
extraire séparément les séparateurs n'apporte rien et
empêchera plutôt le traitement par perte de l'information "2
séparateurs consécutifs".
Pas forcement. On peut très bien le faire des deux façons, selon
ses goûts.
un opérateur istringstream& >> (istringstream&, double&)
Existe déjà. Il faut utiliser un type proxy autour de
double :
C'est exact. Il pourrait donner l'air de marcher s'il marche.
En fait, il ne serait pas trop difficile de l'écrire :
std::istream&
operator>>( std::istream& source,
DelimitedDouble const& destProxy )
{
if ( source.peek() == 't' ) {
source.get() ;
destProxy = 0.0L ;
} else {
double tmp ;
source >> tmp ;
if ( source ) {
destProxy = tmp ;
}
}
return *this ;
}
extraire séparément les séparateurs n'apporte rien et
empêchera plutôt le traitement par perte de l'information "2
séparateurs consécutifs".
Pas forcement. On peut très bien le faire des deux façons, selon
ses goûts.
un opérateur istringstream& >> (istringstream&, double&)
Existe déjà. Il faut utiliser un type proxy autour de
double :
C'est exact. Il pourrait donner l'air de marcher s'il marche.
En fait, il ne serait pas trop difficile de l'écrire :
std::istream&
operator>>( std::istream& source,
DelimitedDouble const& destProxy )
{
if ( source.peek() == 't' ) {
source.get() ;
destProxy = 0.0L ;
} else {
double tmp ;
source >> tmp ;
if ( source ) {
destProxy = tmp ;
}
}
return *this ;
}
extraire séparément les séparateurs n'apporte rien et
empêchera plutôt le traitement par perte de l'information "2
séparateurs consécutifs".
Pas forcement. On peut très bien le faire des deux façons, selon
ses goûts.
James Kanze wrote on 28/04/2007 13:32:
// le flux contient à la pos. courante:
// <tab><double>{...} pour un nb présent
// <tab>EOL|<tab>... pour un nb absent
James Kanze wrote on 28/04/2007 13:32:
// le flux contient à la pos. courante:
// <tab><double>{...} pour un nb présent
// <tab>EOL|<tab>... pour un nb absent
James Kanze wrote on 28/04/2007 13:32:
// le flux contient à la pos. courante:
// <tab><double>{...} pour un nb présent
// <tab>EOL|<tab>... pour un nb absent