[erledigt] CSV-Export

Das Langzeitarchiv für HomeMatic

Moderator: Co-Administratoren

Antworten
Masquerader
Beiträge: 5
Registriert: 29.04.2015, 10:40

[erledigt] CSV-Export

Beitrag von Masquerader » 14.03.2018, 08:29

Hallo,

ich habe gestern auf die 1.2 aktualisiert und es hat auch alles prima geklappt. Jetzt habe ich aber ein Problem beim Export von CSV-Dateien. Ich hatte mir die csv.gy abgeändert, damit ich eine CSV ohne Tausenderstelle und mit Komma als Trenner bekomme. Das funktioniert plötzlich nicht mehr. Also habe ich die originale Datei wieder genommen, dort scheint es aber auch nicht richtig zu funktionieren. Laut dem Zahlenformat

Code: Alles auswählen

def numberFormat=new DecimalFormat('#,##0.###')
erwarte ich eine Zahl 1,234.567. Es kommt aber in Wirklichkeit die Zahl mit einem Komma als Komma (9,2). Nachfolgend ein Ausschnitt aus der CSV.

Code: Alles auswählen

Kombi-Sensor:1.TEMPERATURE;;
Zeitstempel;Wert;Status
13.03.2018 08:22:02,707;9;2
13.03.2018 08:23:56,425;9,2;2
Hat noch jemand eine Idee was hier das Problem ist?

MFG

Sebastian
Zuletzt geändert von Masquerader am 16.03.2018, 09:33, insgesamt 1-mal geändert.

Mathias
Beiträge: 1783
Registriert: 03.11.2010, 10:25
System: CCU
Wohnort: Aachen
Hat sich bedankt: 58 Mal
Danksagung erhalten: 259 Mal
Kontaktdaten:

Re: CSV-Export

Beitrag von Mathias » 15.03.2018, 13:59

Es ist schon so gewollt, dass ein Komma (,) als Dezimaltrennzeichen und ein Semikolon (;) als Feldseparator von csv.gy ausgegeben wird. Dies ist das CSV-Format, das von MS Excel (mit deutscher Ländereinstellung) verwendet wird. Mit einem Doppelklick werden die Dateien korrekt in MS Excel geöffnet.

Das Muster #,##0.###, das in der folgenden Programmzeile verwendet wird, verwendet nicht lokalisierte Symbole, um das Format zu setzen. Ein Punkt . bedeutet immer (unabhängig von der Ländereinstellung) ein Dezimaltrennzeichen.

Code: Alles auswählen

def numberFormat=new DecimalFormat('#,##0.###')
Die nicht lokalisierten Symbole werden danach noch abhängig von der Ländereinstellung des Betriebssystems in lokalisierte Symbole umgesetzt.
Als Dezimaltrennzeichen wird in Deutschland ein Komma verwendet. Der Punkt aus dem Muster wird also als Komma ausgegeben.

Wenn Du das anpassen möchtest, musst Du z.B. die Symbole aus dem englischen (en) verwenden:

Code: Alles auswählen

import java.text.DecimalFormatSymbols
def dfs=DecimalFormatSymbols.getInstance(new Locale('en'))
numberFormat.setDecimalFormatSymbols(dfs)
Dann bekommst Du Dein gewünschtes Format. Die API in Java ist etwas komplex, da das Thema Lokalisierung komplex ist.

Nachtrag:

Wenn Du einfach das englische Zahlenformat haben möchtest, ohne eine bestimmte Anzahl an Vorkomma-/Nachkommastellen oder Tausendertrennzeichen, dann kannst Du auch die Zeile 53 wie folgt abändern:
Von

Code: Alles auswählen

valueFormatter={ numberFormat.format(it.value) }
nach

Code: Alles auswählen

valueFormatter={ it }
Gruß
Mathias

Masquerader
Beiträge: 5
Registriert: 29.04.2015, 10:40

Re: [erledigt] CSV-Export

Beitrag von Masquerader » 16.03.2018, 09:34

Vielen Dank. Mit den Tipps konnte ich mein Problem lösen. Jetzt funktioniert wieder alles wie es soll.

Ciao

Sebastian

Antworten

Zurück zu „CCU-Historian“