stringstream problem
-
hola leute
hab in einem stringstream folgenden string:
913,176 1100,000 913,176 1100,000 ...sind alles double werte.
wenn ich nun die werte in ein double array laden will, das kommt nur der erste
werte 'ohne' nachkommastellen an. beim 2ten wert hat der stream schon das fail bit gesetzt. woran kann das liegen ?Meep Meep
-
Hast locale nicht richtig gesetzt. So funktioniert das einlesen nur mit Punkt als Trennzeichen.
-
re
und in welcher datei muss ich das aendern, das ich das problem nicht wieder bekomme ?
in den inludes vom BCB6 hab ich insgesammt 9 dateien die locale.* heissen.Meep Meep
-
<locale>
-
Cpt.Tanga schrieb:
<locale>
kann zu mindest beim BCB nichts stimmen. da finde ich keinen beistrich in der datei, den ich gegen einen punkt austauschen koennte.
Meep Meep
-
Wenn das eine Benutzereingabe ist wuerde ich es an die jeweilige Umgebung anpassen:
#include <sstream> #include <iostream> #include <locale> int main(int argc, char **argv) { if(argc <= 1) return 1; std::istringstream stream(argv[1]); std::locale env = std::locale(""); stream.imbue(env); double a; stream >> a; std::cout << env.name() << ": " << a << std::endl; }Versuch das mal und sag was raus kommt, weis gar nicht ob das unter Windows funktioniert. Mein Linux zeigt mir das:
$ ./locale 1.23
en_US.UTF-8: 1.23
bzw wenn ich umstell:
$ ./locale 1,23
de_DE.UTF-8: 1.23
-
Meep Meep schrieb:
Cpt.Tanga schrieb:
<locale>
kann zu mindest beim BCB nichts stimmen. da finde ich keinen beistrich in der datei, den ich gegen einen punkt austauschen koennte.
Meep Meep
nicht austauschen! die locales sind die regionsspezifischen stream einstellungen. In der doku der locales steht, wie du das einstellen kannst.
-
otze schrieb:
Meep Meep schrieb:
Cpt.Tanga schrieb:
<locale>
kann zu mindest beim BCB nichts stimmen. da finde ich keinen beistrich in der datei, den ich gegen einen punkt austauschen koennte.
Meep Meep
nicht austauschen! die locales sind die regionsspezifischen stream einstellungen. In der doku der locales steht, wie du das einstellen kannst.
und wo finde ich dir doku zu dem zeugs ? hab davon noch nie was gesehen.
Meep Meep
-
@Thomas (:
ja des hat funktioniert. aber was soll der/die/das locale ueberhaupt sein? ich hab darueber bis jetzt noch in keinem buch was gelesen.
waere es nicht einfacher und besser, wenn es dafuer ne globale variable oder so gaebe wo man den ',' gegen einen '.' austauschen kann? ich seh da jetzt ehrlich gesagt keinen sinn in dem zeug.kennt vielleicht jemand ne seite wo locales beschrieben sind?
Meep Meep
PS: auf deutsch waere is am besten. sonst brauch ich wieder ne woche bis ich ueberhaupt den text verstehe
-
Meep Meep schrieb:
ja des hat funktioniert. aber was soll der/die/das locale ueberhaupt sein? ich hab darueber bis jetzt noch in keinem buch was gelesen.
waere es nicht einfacher und besser, wenn es dafuer ne globale variable oder so gaebe wo man den ',' gegen einen '.' austauschen kann? ich seh da jetzt ehrlich gesagt keinen sinn in dem zeug.Es geht hier nicht um einen Punkt! die locales enthalten alle regionsspezifischen einstellungen, zb für uhrzeit, datumsangaben usw.
hier mal ein englisches tutorial(deutsch findest zu dem thema quasi garnichts), das dir zeigt, wozu locales dienen, und was man damit machen kann.
http://www.cantrip.org/locale.html
das einfachste wird aber wohl erstmal sein, den string durchzugehen und alle "," durch "." zu ersetzen.
Ps: mit
std::locale env = std::locale(""); stream.imbue(env);hat Thomas (: versucht, das "standard" locale für dein system zu laden. In deinem Fall mit einem deutschen Windows/linux ist das meistens ein deutsches locale(dies muss aber nicht sein!).
-
Gibt auch ein (sehr gutes) Buch über die Streams:
Standard C++ IOStreams and Locales | ISBN: 0201183951
Habe es selbst und kann es wirklich jedem empfehlen der sich für die streams interressiert. Es wird sowohl die Benutzung, Erweiterung als auch die Implementierung behandelt.