[gelöst] csv mit Dezimalzahlen

Alles rund um die Programmierung mit Qt
Antworten
RogerWilco
Beiträge: 61
Registriert: 26. November 2009 00:08
Kontaktdaten:

[gelöst] csv mit Dezimalzahlen

Beitrag 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?
Zuletzt geändert von RogerWilco am 7. Dezember 2009 21:42, insgesamt 1-mal geändert.
russkij
Beiträge: 57
Registriert: 14. Dezember 2005 11:57

Beitrag 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 :-)
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: csv mit Dezimalzahlen

Beitrag 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.
softwaremaker
Beiträge: 149
Registriert: 1. April 2009 19:25

jooo

Beitrag 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: ;
RogerWilco
Beiträge: 61
Registriert: 26. November 2009 00:08
Kontaktdaten:

Beitrag 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...
RogerWilco
Beiträge: 61
Registriert: 26. November 2009 00:08
Kontaktdaten:

Beitrag 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!
russkij
Beiträge: 57
Registriert: 14. Dezember 2005 11:57

Beitrag 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;
}
Antworten