Seite 1 von 1

[gelöst] csv mit Dezimalzahlen

Verfasst: 7. Dezember 2009 12:21
von RogerWilco
Hallo,

ich lese eine csv Datei (Trennzeichen Semikolon) ein und Trenne den Stream mit "split" auf.
Die erste Zahl soll eine Float sein, die allerdings als 0,0625 ankommt...

1. Spalte float
2. Spalte integer
Trennzeichen ";"

Über eine Schleife mit While wird der geamte Inhalt ausgelesen:

str_Line = ds.readLine();
Line = str_Line.split(";");

Order = Line.at(0);

Ampl = Line.at(1);
SpektrumToFill.addLine(Order.toFloat(), Ampl.toInt());

In der letzten Zeile belege ich eine Klasse mit zwei Vektoren mit jeweils der ersten Spalte und der zweiten Spalte.
Die erste Spalte hat aber keine Dezimalstellen mehr (werden alle als z.b. 5.000) angezeigt.
Ich habe das Komma in der csv im Verdacht...
Muß ich den String nochmal auftrennen, oder gibt es etwas komfortableres?

Verfasst: 7. Dezember 2009 15:56
von russkij
QString mu("0.0625");
float a = mu.toFloat();
QString bu("0,0625");
float b = mu.toFloat();

a und b haben den gleichen wert.
zumindest im debugger :-)

Re: csv mit Dezimalzahlen

Verfasst: 7. Dezember 2009 16:09
von franzf
RogerWilco hat geschrieben:Die erste Zahl soll eine Float sein, die allerdings als 0,0625 ankommt...
Ist das Absicht, dass das ein "," als Trennzeichen ist?
Das ist bei uns das "Komma"-Zeichen zum Abtrennen der Dezimalzeichen.
Wenn dein Programm aber mit anderen Lokale läuft, hast du Probleme.
Ich glaub in USA ist das Komma das Tausendertrennzeichen, der Punkt das "Komma" für Fließkommazahlen. (Nagel mich mit USA nicht fest, da bin ich mir gar nicht sicher ;))

Erweiter deine Tests mal dahingehend.

jooo

Verfasst: 7. Dezember 2009 16:47
von softwaremaker
franzf liegt vollkommen richtig:

DE: 1.300.200,50 EUR
US: 1,300,200.50 $

aber man verwendet ein Semikolon als Trennzeichen bei CSV: ;

Verfasst: 7. Dezember 2009 17:01
von RogerWilco
Beide Trennzeichen sind möglich.
Man merkt das, wenn man Tabellen in Excel importiert.
Dort kann man den "Delimiter" ",", ";", "Tab" etc. wählen.
In meinem Fall ist das Format in dieser Form vogegeben, weil ich aus einem Meßsystem exportiere und das exportiert nunmal so...
In diesem Fall dürfte das System englisch gewesen sein.

@russkij:
Das hatte ich versucht, aber vielleicht hatte ich noch einen anderen Fehler drin?
Ich werde es nochmal testen.

Z.Zt. splitte ich einfach mit "split" weiter auf und addiere den Weet vor dem Komma zum Wert nach dem Komma...

Verfasst: 7. Dezember 2009 17:07
von RogerWilco
Ruskij hatte Recht...
Es funktioniert tatsächlich.
Ich hatte vorher einen Bug, weil ich die den Vektor in den ich schreibe, als int-Vektor definiert.
Na, und da sind die Nachkommastellen logischerweise abgeschnitten worden...

Herrje...
*Besserung gelobe*

Vielen Dank!

Verfasst: 8. Dezember 2009 08:37
von russkij
hehe dachte ich schon dass der fehler wo anders ist.

aber mit solchen fehlern müssen wir halt leben, glaub nicht dass man die ausschließen kann.

eins der fehler, nach dem ich mal 2 stunden gesucht hab:

if(bla); // ';'--> logischer weise war die bedingung nie wahr :-)
{
tue was;
}