Forum: PC Hard- und Software Datumspalten in CSV umrechnen


You were forwarded to this site from EmbDev.net. Back to EmbDev.net
von Abdul K. (ehydra) Benutzerseite


Lesenswert?

Ich habe eine CSV-Datei, in der eine Zeitreihe mit Zeitspalten in der 
Form 20160101:1910 steht. Vor dem Doppelpunkt das Datum, dahinter die 
Uhrzeit hhmm.
Wie bekommt man daraus eine reine Sekundenangabe?

LibreOffice kann das wohl nicht? Bin aber mit Excel-Kram echt 
unerfahren.

von Patrick L. (Firma: S-C-I DATA GbR) (pali64)


Lesenswert?

Abdul K. schrieb:
> LibreOffice kann das wohl nicht? Bin aber mit Excel-Kram echt
> unerfahren.

Doch dazu gibt es eine Funktion.
Wobei was willst du als Antwort?
Sekunden seit dem Tag "0" des Gregorianischen Kalenders.
Oder Sekunden-Zahl zweier Zeit-Bezugspunkte ?

Je nach dem brauchst du eine andere Formel, bzw. Funktion.

von Wolfgang (Gast)


Lesenswert?

Abdul K. schrieb:
> Vor dem Doppelpunkt das Datum, dahinter die Uhrzeit hhmm.
> Wie bekommt man daraus eine reine Sekundenangabe?

Stunden und Minuten lassen sich einfach in Sekunden umrechnen, auch mit 
LibreOffice. Die letzten vier Zeichen deines Datum/Zeit-Strings 
enthalten zweistellig die Stunden und zweistellig die Minuten. Du kannst 
deine eigenwilligen Strings einfach in ein Standarddatumsformat umsetzen 
und dann eine der eingebauten Funktionen benutzen oder du extrahierst 
die Teilstrings, wandelst sie in Zahlen um und berechnest daraus deine 
Sekunden.

von Heinz B. (Firma: Privat) (hbrill)


Lesenswert?

Abdul K. schrieb:
> Wie bekommt man daraus eine reine Sekundenangabe?

Zuerst einmal mußt du auch einen Bezugs-zeitpunkt haben.
Meinst du die Differenz zwischen dem angegebenen Zeitpunkt
und dem aktuellen Zeitpunkt ? Die Sekunden mußt du dir
dann selber ausrechnen.
Am besten ein kleines Script in der Sprache deiner Wahl
schreiben, das die .csv Zeile für Zeile ausliest und das
jeweilige Datum konvertiert zurückschreibt.

von oszi40 (Gast)


Lesenswert?


von eProfi (Gast)


Lesenswert?

Grüß Dich Abdul!
Bei Excel2013 ist das angegebene Datum "1.1.2016 19:10" als Zahl 
dargestellt 42370,79861.
Dazu einfach bei Zelle formatieren von Benutzerdefiniert (TT.MM.JJJJ 
hh:mm) auf Zahl oder Standard umstellen.
Diese kann man mit 3600 multiplizieren: 152534875,00

Oder wir rechnen die Tage nach der alten TI58-Formel* umgerechnet mal 
24*3600=86400, Stunden mal 3600, Minuten mal 60.
Dann kommt für Dein Datum 736329*86400+19*3600+10*60=63618894600 heraus.
*) Siehe Beitrag "TI58 TI-58 TI59 TI-59 solid state software modul Programm 20"

Aufpassen, die Formeln änderten sich zwischen den einzelnen 
Excel-Versionen und waren teilweise fehlerhaft.

von eProfi (Gast)


Lesenswert?

> Diese kann man mit 3600 multiplizieren: 152534875,00

Korrektur: man muss noch mal 24 multiplizieren:
24*3600=86400
42370,79861*86400=3660836999,904  also ungefähr 3660837000 Sekunden seit 
dem Jahre 1900.

Die TexasInstruments-Formel rechnet ab etwa dem Jahre 0:
736329/365,25=2015,95893

von c-hater (Gast)


Lesenswert?

Abdul K. schrieb:
> Ich habe eine CSV-Datei, in der eine Zeitreihe mit Zeitspalten in der
> Form 20160101:1910 steht. Vor dem Doppelpunkt das Datum, dahinter die
> Uhrzeit hhmm.
> Wie bekommt man daraus eine reine Sekundenangabe?

Ist doch easy. Erstmal mit einem Editor, der Ersetzung auf Basis von 
regulären Ausdrücken beherrscht, diese völlig schwachsinnig formatierte 
Zeitspalte (welcher völlig Blinde Wichser schreibt denn sowas?) in ein 
übliches Representationsformat für datetime umwandeln.

Danach ist es dann kein Problem mhr, die Sache mit Excel oder 
irgendeiner anderen Tabellenkalkulation einzulesen und mit dem 
jeweiligen Bestand an eingebauten Funktionen in "Sekunden" (die dann 
sinnvollerweise bezogen auf den Zeitstempel der ersten Zeile) 
umzuwandeln.

Kinderkram. Der Profi benötigt keine Minute, um sowas triviales zu 
erledigen.

von Abdul K. (ehydra) Benutzerseite


Lesenswert?

Wolfgang schrieb:
> Du kannst deine eigenwilligen Strings einfach in ein
> Standarddatumsformat umsetzen und dann eine der eingebauten Funktionen
> benutzen oder du extrahierst die Teilstrings, wandelst sie in Zahlen um
> und berechnest daraus deine Sekunden.

Das ist ein Format der EU, ich finde es auch seltsam.
Wie kann ich denn Teilstrings extrahieren und zu einer letztlich Zahl 
zusammensetzen?

von Heinz B. (Firma: Privat) (hbrill)


Lesenswert?

Zeige doch mal so eine Zeile der .csv - Datei.
Am besten mit den ganzen Spalten.
Und schreibe mal genau, was du willst. Sollen nur
die Stunden und Minuten (also letzte 4 Ziffern)
oder gar mit Datum in Sekunden berechnet werden ?
Sind alle Spalten mit so einem Datum besetzt, oder
geht es nur um eine Spalte ?

Ansonsten stochern wir hier weiterhin im Nebel.

: Bearbeitet durch User
von c-hater (Gast)


Lesenswert?

Abdul K. schrieb:

> Das ist ein Format der EU

Tatsächlich? Festgelegt in welcher EU-weit gültigen Norm?

> Wie kann ich denn Teilstrings extrahieren und zu einer letztlich Zahl
> zusammensetzen?

Die Antwort wurde dir bereits gegeben.

von Abdul K. (ehydra) Benutzerseite


Angehängte Dateien:

Lesenswert?

c-hater schrieb:
>> Das ist ein Format der EU
>
> Tatsächlich? Festgelegt in welcher EU-weit gültigen Norm?

Gute Frage. Die Daten kommen von hier:
https://re.jrc.ec.europa.eu/pvg_tools/en/#MR

Hab einen reduzierten Datensatz angehangen. Was ich hinbekomme, habe ich 
bereits gelöscht aus dem EU-Bloat.

>
>> Wie kann ich denn Teilstrings extrahieren und zu einer letztlich Zahl
>> zusammensetzen?
>
> Die Antwort wurde dir bereits gegeben.

Ich habe keine Ahnung wie man das in LibreOffice einsetzen soll. Wohin? 
Das einzige was ich hinbekomme, ist Spalten löschen. Ich bin da leider 
völliger NOOP.


Ich möchte letztlich mehrere Jahre in LTspice als PWL importieren. Dafür 
brauch ich dann aber absolute <kontinuierliche> Sekundenangaben und den 
Strahlungswert aus der zweiten Spalte.

Muß jetzt auch nicht Excel sein. Was in C oder Python wäre auch ok.

: Bearbeitet durch User
von eProfi (Gast)


Lesenswert?

=teil(a1;1;4)  --> 2016
=teil(a1;5;2)  --> 01
=teil(a1;7;2)  --> 01
etc

von c-hater (Gast)


Lesenswert?

Abdul K. schrieb:

> Gute Frage. Die Daten kommen von hier:
> https://re.jrc.ec.europa.eu/pvg_tools/en/#MR

Nunja, wohl aus einer Quelle in der EU-TLD. Aber nix, was die EU 
verantwortet oder für was EU-Normen zwingend anwendbar wären. Jeder 
hergelaufene Vollhonk kann eine Subdomain in *.eu registrieren und 
völlig beliebigen Bullshit dort veröffentlichen.

Das solltest solltest du zuerst mal begreifen lernen, bis du das nicht 
begriffen hast, bist du auch nur eins: ein Vollhonk...

> Ich habe keine Ahnung wie man das in LibreOffice einsetzen soll.

Eben nicht in LibreOffice (oder sonst einer Tabellenkalkulation), 
sondern vorher.

Einfach einen Editor verwenden, der "regular expressions" kann und 
Ersetzungen auf Basis eben selbiger. Es gibt unzählige für jedes derzeit 
relevante OS.

von Vollhonk (Gast)


Lesenswert?

c-hater schrieb:
> Das solltest solltest du zuerst mal begreifen lernen, bis du das nicht
> begriffen hast, bist du auch nur eins: ein Vollhonk...

Trink mal wieder ein Glas Gülle, sonst läufst du noch heiß.

von Heinz B. (Firma: Privat) (hbrill)


Angehängte Dateien:

Lesenswert?

Hab es mal konvertiert.
Ist nun die Frage, ob das das richtige Format für dich wäre.
Du hast ja noch nicht gesagt, von welchem Vergleichswert wir
ausgehen sollen. Hier habe ich mal das ganze Datum mit Stunden
und Minuten genommen.

: Bearbeitet durch User
von pnp (Gast)


Lesenswert?

c-hater schrieb:
> völlig Blinde Wichser

Unser über alles geliebte Hasser erzählt mal wieder von zu Hause...

von Abdul K. (ehydra) Benutzerseite


Lesenswert?

Jetzt geht es c-hater gleich wieder viel besser🤣

Beitrag #6842775 wurde von einem Moderator gelöscht.
Beitrag #6842776 wurde von einem Moderator gelöscht.
Beitrag #6842777 wurde von einem Moderator gelöscht.
von Zeno (Gast)


Lesenswert?

Abdul K. schrieb:
> Wie kann ich denn Teilstrings extrahieren und zu einer letztlich Zahl
> zusammensetzen?
Einfach den String in seine Bestandteile (Jahr, Monat, Tag, Stunde, 
Minute) zerlegen. Das geht in Libreoffice ganz einfach mit einer Formel, 
wobei LEFT, MID und RIGHT Deine Freunde wären. Die zerlegten Anteile 
setzt man in ein gängiges Datumsformat zusammen, z.B. 01.01.2016. Diesen 
String übergibt man an DATEVALUE und bekommt die Tagesnummer ab dem 
1.1.1900. Diesen Wert multipliziert man mit 3600 und 24, womit man die 
Zahl der Sekunden seit dem 1.1.1900 hat. Zu dem Ganzen addiert man man 
noch die Uhrzeit in Sekunden umgerechnet.
Man braucht Libreoffice 5 Funktionen (LEFT, MID, RIGHT, DATEVALUE, 
VALUE) die man geeignet kombiniert. Der Rest ist Mathematik.
Das war jetzt schwer.

von Zeno (Gast)


Lesenswert?

Habe es gerade mal in Libreoffice getestet und es ist bibbi einfach. Gut 
in einer Minute, wie c-hater mein habe ich es nicht geschafft, aber in 2 
Minuten ist es machbar.

von Abdul K. (ehydra) Benutzerseite


Lesenswert?

Deine Erklärung klingt ausführlich genug, das kann ich mal probieren.
Ich habe keinerlei Problem mit Datumsmathe, aber mit der Bedienung von 
Office.

---
Mir scheint c-hater ist gar nicht der Originale.

von Schlaumaier (Gast)


Lesenswert?

Zeno schrieb:
> Man braucht Libreoffice 5 Funktionen (LEFT, MID, RIGHT, DATEVALUE,
> VALUE) die man geeignet kombiniert. Der Rest ist Mathematik.
> Das war jetzt schwer.

Naja, LEFT + RIGHT kann man sich sparen. Dafür braucht man LEN 
dringender.


So bekommt man wenigstens eine gewisse Sicherheit rein, wenn man die 
Formel "Runter kopiert".

von tomatoffel (Gast)


Lesenswert?

Abdul K. schrieb:


>
> Das ist ein Format der EU, ich finde es auch seltsam.
> Wie kann ich denn Teilstrings extrahieren und zu einer letztlich Zahl
> zusammensetzen?

hat sich ja erledigt, ISO 8601 artig?!
T scheint der "offizielle" seperator zu sein

20160101:1910    20160101T1910 ....



evtl. interessant, test:

$date -d '20160101:1910'
date: invalid date ‘20160101:1910’

$date -d '20160101T1910'
Fri Jan  1 13:10:00 CET 2016

date -d '20160101T1910' +%s
1451650200

----
https://en.wikipedia.org/wiki/ISO_8601
https://www.gnu.org/software/coreutils/manual/html_node/Date-input-formats.html

von tomatoffel (Gast)


Lesenswert?

eProfi schrieb:
>> Diese kann man mit 3600 multiplizieren: 152534875,00
>
> Korrektur: man muss noch mal 24 multiplizieren:
> 24*3600=86400
> 42370,79861*86400=3660836999,904  also ungefähr 3660837000 Sekunden seit
> dem Jahre 1900.
>
> Die TexasInstruments-Formel rechnet ab etwa dem Jahre 0:
> 736329/365,25=2015,95893

:)


Geltungsbereich der Jahreszahlen

Die Norm* lässt nur die Jahreszahlen von 1583 (dem Jahr nach Einführung 
des gregorianischen Kalenders) bis 9999 ohne weitere Vereinbarung zu.


*https://de.wikipedia.org/wiki/ISO_8601

von Heinz B. (Firma: Privat) (hbrill)


Lesenswert?

Ich würde mich da auch an die allgemeinen Regeln halten.
Stichtag : 30.12.1899
Mit dieser Referenz arbeiten schließlich viele, wie
Delphi, VBA, Access usw.
Datumsangaben vor dieser Referenz werden als Minuswerte angezeigt.
Also :
01.01.1900  -> 2
30.12.1899  -> 0
29.12.1899  -> -1
01.01.0001   -> -693593

von Peter M. (r2d3)


Lesenswert?

Hall Abdul K.,

Abdul K. schrieb:
> Ich habe eine CSV-Datei, in der eine Zeitreihe mit Zeitspalten in der
> Form 20160101:1910 steht. Vor dem Doppelpunkt das Datum, dahinter die
> Uhrzeit hhmm.
> Wie bekommt man daraus eine reine Sekundenangabe?
>
> LibreOffice kann das wohl nicht? Bin aber mit Excel-Kram echt
> unerfahren.

es gibt zwei Lösungen. Entweder schreibst Du Dir einen Parser in VBA 
(siehe Beitrag Heinz B.), also eine Prozedur in VBA (das ist wie die 
Programmiersprache Basic) und liest die CSV-Datei zeilenweise ein und 
befüllst die Excel-Zellen derart oder Du öffnest die CSV-Datei mit 
Libre-Office und fügst einfach eine zusammengesetzte Funktion in eine 
Zelle ein und kopierst diese Zelle die Spalte hinab.

Anbei erhältst Du die zweite Lösung.
Solche Formate mit festen Positionen kann man ganz simpel mit ein paar 
Funktionsaufrufen parsen.
Ich arbeite zu Hause mit Excel 2000, habe aber hier auch Libre Office 
6.5.7.2 am laufen. Die Methode ist unter beiden Office-Paketen dieselbe.
Vermutlich sind auch die Funktionsnamen gleich.

Um eine kontinuierliche Zeitdarstellung (Deine Anforderung) z.B. für 
Charts zu gewährleisten, wandele ich die Datums- und Zeitangabe in die 
Excel-interne Darstellung um, weil die interne Darstellung das 
gewährleistet.
Excel bildet das Datum als Ganzzahl ab und die Uhrzeit als Fraktion von 
1.
Deswegen kann man ganz einfach schreiben:

' Pseudocode
sek= [ Datum ( Jahr, Monat, Tag ) + Zeit ( Stunde, Minute, Sekunde) ] * 
24*60*60

Im folgenden sind LINKS, TEIL und RECHTS String-Operationen,
mit "+0" konvertiere ich die Strings schnell in numerische Werte anstatt 
die Funktion =wert() zu nutzen.

=(DATUM(LINKS(A1;4)+0;TEIL(A1;5;2)+0;TEIL(A1;7;2)+0)+ZEIT(TEIL(A1;10;2)+ 
0;RECHTS(A1;2)+0;0))*86400

Klick' einfach mal auf das blaue fx-Symbol. Dahinter verbirgt sich der 
Funktionsassisten - damit hättest Du diese Lösung auch geschafft!

: Bearbeitet durch User
von Peter M. (r2d3)


Lesenswert?

oszi40 schrieb:
> So ähnlich wie dort?
> 
https://de.extendoffice.com/product/kutools-for-excel/excel-convert-time-to-seconds-minutes-hours.html

Nein. Hier sind die excelfernen Datums- und Zeitstrings schon gewandelt. 
Dieser Link löst nicht das Wandlungsproblem.

Wolfgang schrieb:
> Abdul K. schrieb:
>> Vor dem Doppelpunkt das Datum, dahinter die Uhrzeit hhmm.
>> Wie bekommt man daraus eine reine Sekundenangabe?
>
> Stunden und Minuten lassen sich einfach in Sekunden umrechnen, auch mit
> LibreOffice. Die letzten vier Zeichen deines Datum/Zeit-Strings
> enthalten zweistellig die Stunden und zweistellig die Minuten. Du kannst
> deine eigenwilligen Strings einfach in ein Standarddatumsformat umsetzen
> und dann eine der eingebauten Funktionen benutzen oder du extrahierst
> die Teilstrings, wandelst sie in Zahlen um und berechnest daraus deine
> Sekunden.

Wolfgang, hier fehlt die Erklärung des Standarddatumsformats.

eProfi schrieb:
> Korrektur: man muss noch mal 24 multiplizieren:
> 24*3600=86400
> 42370,79861*86400=3660836999,904  also ungefähr 3660837000 Sekunden seit
> dem Jahre 1900.

Die Datumsangabe liegt doch noch gar nicht als numerischer Wert vor. Von 
daher ist der Link nicht hilfreich. Nach Konvertierung ist alles simpel.

c-hater schrieb:
> (welcher völlig Blinde Wichser schreibt denn sowas?)

c-hater schrieb:
> Das solltest solltest du zuerst mal begreifen lernen, bis du das nicht
> begriffen hast, bist du auch nur eins: ein Vollhonk...

Na, was ist denn das für eine vulgäre Sprache? Es ist noch kein Meister 
vom Himmel gefallen.

> Kinderkram. Der Profi benötigt keine Minute, um sowas triviales zu
> erledigen.

Ja natürlich ist das simpel. Aber Du hast es leider nicht geliefert.
Bist Du etwa kein Profi? Bist Du etwa - ein "Vollhonk"? Das will ich 
nicht glauben müssen!

c-hater schrieb:
> Einfach einen Editor verwenden, der "regular expressions" kann und
> Ersetzungen auf Basis eben selbiger. Es gibt unzählige für jedes derzeit
> relevante OS.

Das klingt interessant. "Regular expressions" habe ich nicht drauf, aber 
das ist nicht der Grund, wieso ich behaupte, dass das von hinten durch 
die Brust in's Auge geschossen ist.

Zeno schrieb:
> Habe es gerade mal in Libreoffice getestet und es ist bibbi einfach. Gut
> in einer Minute, wie c-hater mein habe ich es nicht geschafft, aber in 2
> Minuten ist es machbar.

An c-hater komme ich auch nicht heran. Gepriesen sei der 
Excel-Superchecker! Aber mein Vorbild ist er trotzdem nicht. :)

Schlaumaier schrieb:
> Naja, LEFT + RIGHT kann man sich sparen. Dafür braucht man LEN
> dringender.

Nein. LEN braucht man nur für Formate, die in der Breite schwanken.
Setzen, sechs, Schlaumeier (wie auch sonst fast immer).

Fazit
Fremde Zeitreihen kommen fast nie mundgerecht daher, finde ich.
Immer muss man nacharbeiten. Mittlerweile glaube ich, das ist pure 
Bosheit der Autoren. :)

: Bearbeitet durch User
von Heinz B. (Firma: Privat) (hbrill)


Lesenswert?

Peter M. schrieb:
> Das klingt interessant. "Regular expressions" habe ich nicht drauf, aber
> das ist nicht der Grund, wieso ich behaupte, dass das von hinten durch
> die Brust in's Auge geschossen ist.

Die regulären Ausdrücke braucht man hier in der Tat nicht zwingend,
da der Datums-String vor dem Doppelpunkt immer 8 Zeichen lang und
der Zeit-String hinter dem Doppelpunkt immer 4 Zeichen lang ist.
Reguläre Ausdrücke würden erst interessant werden, wenn die Längen
der beiden Strings schwanken würden. Hier ist das Abgreifen mit den
normalen Stringfunktionen erheblich leichter und belastet einen
Anfänger nur zusätzlich (Einlernzeit).
Hier mal mein Profan (Basic) Code :
1
   dbdatum = DToc$(Left$(s, 8)) ' DB-Format TT.MM.JJJJ
2
   dbzeit = Ins$(":", Mid$(s, 10, 4), 3) ' normales Zeitformat Std:Min
3
   datum = DT("SetTime", dbzeit, DT("SetDate", dbdatum)) 'als Fließkommazahl 
4
   ' mit Datum + Zeit
5
   AddString(0, Str$(Int(Round(datum  * 86400, 0))) + "," + SubStr$(s, 2, ","))    ' Ausgabe mit kfm. Runden
Wie man sieht, ist das gar nicht viel Schnickschnack, was die
Stringfunktionen betrifft.

: Bearbeitet durch User
von Schlaumaier (Gast)


Lesenswert?

Peter M. schrieb:
> Nein. LEN braucht man nur für Formate, die in der Breite schwanken.
> Setzen, sechs, Schlaumeier (wie auch sonst fast immer).

Schlaumaier schrieb:
> So bekommt man wenigstens eine gewisse Sicherheit rein, wenn man die
> Formel "Runter kopiert".

Ich setzte eine LEN abfrage davor, so kann ich wenigsten ETWAS sicher 
sein, das es keine Fehlerhaften Eingaben sind.

Wenn ich das via Script machen würde würden sogar Logik-Prüfungen drin 
sein.
Die würden dann auch 20160101:4510. Als Fehler erkennen sowie 
20160230:1910

Es gibt in Excel-Tabelle nix schlimmeres als Logik-Fehler.

Besonders beim Import wo durch seltsame Leerzeichen 342534 als Text 
gelesen werden. Und man denkt das ist eine Zahl und bildet eine Summe 
aus Bereichwert. Excel ist so dumm und merkt das nicht.

Aber arbeitet ihr halt ohne Netz. Kein Wunder das es dauernd Updates 
gibt.
Ich musste in meiner ganzen Zeit nur einmal ein Update nachschicken, 
weil ich vergessen habe, bei einer Skalierungsberechnung der Anzeige 
horizontale Monitore zu berücksichtigen.

von Peter M. (r2d3)


Lesenswert?

Tu' mir einen Gefallen Schlaumeier, (Pukki, Alexander et alii)

anstatt hier dumm rumzuquatschen, veröffentlich hier mal Deinen 
kugelsicheren Importcode.

Du bist einfach eine didaktische Null, weil Du auf den Wissenstandes des 
Fragers bei Ecel, bzw. VBA nicht eingehst.
Hier geht es darum, erst einmal eine lauffähige Version zu erstellen, 
die der Frager auch versteht.

Der Rest ist Schmuck am Nachthemd.
Gerne kannst Du eine weiter Kontrollspalte in der Exceldatei von Abdul 
erstellen, in der Du Dich so richtig austoben und gehen lassen kannst 
anstatt hier wohlfeile Verbesserungsvorschläge zu machen ohne etwas zu 
realisieren.

Danke!

P.S.: Es ist kein Qualitätsmerkmal, wenn man dauernd die Identität 
wechseln muss.

: Bearbeitet durch User
von Yalu X. (yalu) (Moderator)


Angehängte Dateien:

Lesenswert?

Abdul K. schrieb:
> Muß jetzt auch nicht Excel sein. Was in C oder Python wäre auch ok.

Das ist auf jeden Fall die bessere Wahl, wenn du mehr als nur eine
CSV-Datei konvertieren möchtest, denn statt Excel-typischer, nerviger
Mausklickorgien rufst du einfach ein C- oder Python-Programm auf, das
vom Einlesen der CSV-Datei bis zum Abspeichern der PWL-Datei alles
in einem Rutsch erledigt.

Ich habe dazu mal ein rudimentäres Python-Programm angehängt.

Aufruf:
1
csv2pwl.py input.csv output.txt

Die Datei output.txt enthält eine Zeit- und eine Datenspalte und kann
als PWL-Datei in LTspice geladen werden.

Das Programm enthält drei Konfigurationsparameter:

- column_no: Die Nummer der Spalte, die extrahiert werden soll

- skip_rows: Die Anzahl der Kopfzeilen am Anfang der CSV-Datei, die
  übersprungen werden sollen

- time_format: Das Zeitformat, s. hier

    https://docs.python.org/3/library/datetime.html#strftime-and-strptime-format-codes

: Bearbeitet durch Moderator
von Abdul K. (ehydra) Benutzerseite


Lesenswert?

Welches Python ist da empfehlenswert für Windoof?

Yalu unterstützt aktiv meine Faulheit. Das ist gar nicht gut🤣

von Schlaumaier (Gast)


Lesenswert?

Yalu X. schrieb:
> enn statt Excel-typischer, nerviger
> Mausklickorgien rufst du einfach ein C- oder Python-Programm auf

hihi.

GENAU

Allerdings würde ich VB nehmen ;)

Ich mag auch nicht diese Formelwusselei bei Excel. Die werden mit zu 
unübersichtlich wenn ich alles in eine Zeile klatschen muss.

von Abdul K. (ehydra) Benutzerseite


Lesenswert?

Heinz B. schrieb:
> Hab es mal konvertiert.
> Ist nun die Frage, ob das das richtige Format für dich wäre.
> Du hast ja noch nicht gesagt, von welchem Vergleichswert wir
> ausgehen sollen.

Danke! Hab das gleich verwendet, damit ich mich sofort in LTspice 
austoben kann. Den Offset im Datum konnte ich mit meinen rudimentären 
Excel-Kenntnissen dann sogar noch hinkriegen, so daß der Datensatz nun 
bei Null beginnt. LTspice kommt sonst nicht damit zurecht.

Für die weiteren Jahre werde ich dann die zahlreichen Anregungen hier 
noch umsetzen.

So sieht das Ergebnis übrigens aus:
Beitrag "Re: Wie ist der Stromverlauf einer Solarzelle über den Tag?"

von tomatotoffel (Gast)


Lesenswert?

Abdul K. schrieb:

> Excel-Kenntnissen dann sogar noch hinkriegen, so daß der Datensatz nun

das gibt sich doch nichts, Excel u. libreoffice

20160101:1910
        |
........
der ist halt falsch gewählt, colon/dp belegt als Zeittrenner


T wäre richtig aber im Prinzip egal könnte auch nichts
oder x,y,.. stehen



20160101 o. 2016-01-01* ist im Pripzip auch egal
da beide Formen vom Text zum Typ Datum konvertiert werden können

*wie hier:

https://blog.hani-ibrahim.de/en/iso-8601-parsing-in-excel-and-calc.html
sind dann halt 8 anstelle 10 u. 4 statt 6 Stellen für Datum bzw. Zeit

beknackt ist nat. gleich wieder
engl. TIMEVALUE DATEVALUE

deutsche Vers.
Excel ZEITWERT,DATWERT
calc  ZEITWERT,DATUMWERT


aber im Prinzip gleiches vorgehen

von Jobst Q. (joquis)


Lesenswert?

c-hater schrieb:
> diese völlig schwachsinnig formatierte
> Zeitspalte (welcher völlig Blinde Wichser schreibt denn sowas?) in ein
> übliches Representationsformat für datetime umwandeln.

Das ist vielleicht ungewöhnlich, aber eine sehr sinnvolles Format, da es 
auch rein numerisch oder alphabethisch immer richtig sortiert wird. Im 
Gegensatz zu üblichen wie 1.1.2016 19:10.

von Wolfgang (Gast)


Lesenswert?

c-hater schrieb:
> Erstmal mit einem Editor, der Ersetzung auf Basis von
> regulären Ausdrücken beherrscht, diese völlig schwachsinnig formatierte
> Zeitspalte (welcher völlig Blinde Wichser schreibt denn sowas?) in ein
> übliches Representationsformat für datetime umwandeln.

Beruhig dich mal wieder.

So geht's für eine Datumsstring der Form "yyyymmdd:hhnn" in A1 auch 
direkt
(in "Nullpunkt" muss der Nullpunkt der Zeitzählung in Tagen stehen):
1
=(DATUMWERT(VERKETTEN(LINKS(A1;4);"-";TEIL(A1;5;2);"-";TEIL(A1;7;2)))+ZEITWERT(VERKETTEN(TEIL(A1;10;2);":";TEIL(A1;12;2)))-Nullpunkt)*24*3600

Jobst Q. schrieb:
> Im Gegensatz zu üblichen wie 1.1.2016 19:10.

Das "übliche Format" (tt.mm.jjjj) wurde 1996 mit der Neuausgabe der DIN 
5008 aus der Norm gestrichen.
Auf Grund der Trägheit der Masse und mangelndem Verständnis für die 
Vorteile des Formats nach EN 28601:1992 (jjjj-mm-tt) wurde das alte 
Format mit seiner verqueren Reihenfolge 2001 wieder in die 
Schreibstubennorm DIN 5008 aufgenommen. Soviel dazu.

von Abdul K. (ehydra) Benutzerseite


Lesenswert?

Und das Ungetüm beachtet dann auch Schaltjahr und Schaltsekunde?

Das Traurige ist eben die Inkompatibilität verschiedener Plattformen: 
Gesetz, DIN, Office-Paket
Bei allen denkt man sich, die benutzen ihren Erguß nie selbst produktiv.

von Peter M. (r2d3)


Lesenswert?

Hallo Abdul K.,

Abdul K. schrieb:
> Und das Ungetüm beachtet dann auch Schaltjahr und Schaltsekunde?

Nein.
Für das Schaltjahr gibt es Regeln, die auch beachtet werden. Da die 
Schaltsekunden nicht regelbasiert eingefügt werden können, werden sie 
auch nicht beachtet.

Deiner Hochpräzisionsanforderung wird Excel nicht gerecht. Ich 
bezweifele, dass irgendeine Anwendung das tut.

Von daher musst Du Dir selbst etwas für den Zweck schreiben.

Ich frage mich nur, welche Anwendung diese Anforderung an Genauigkeit 
stellt.

von Abdul K. (ehydra) Benutzerseite


Lesenswert?

Ist schon ok, mit der Schaltsekunde hast du natürlich recht.
Die Anwendung ist Solar, sieht man ja oben an meiner Verlinkung.

von tomatotoffel (Gast)


Lesenswert?

Wolfgang schrieb
1
..... 2);":";TEIL(A1;12;2)))-Nullpunkt)*24*3600
[/pre]



Peter M. (r2d3)
1
... 0;RECHTS(A1;2)+0;0))*86400

Wozu eigentlich?

Excel’s internal date time format is a “real” number where the part 
before the decimal point is the number of days and the portion after the 
decimal point is the “fraction” of a day.

MS DATEVALUE/TIMEVALUE liefert doch einen Timestamp halt
mit Bezug zum ~28th February 1900

calc default 30.12.1899 ...

von Heinz B. (Firma: Privat) (hbrill)


Angehängte Dateien:

Lesenswert?

Jobst Q. schrieb:
> Das ist vielleicht ungewöhnlich, aber eine sehr sinnvolles Format, da es
> auch rein numerisch oder alphabethisch immer richtig sortiert wird. Im
> Gegensatz zu üblichen wie 1.1.2016 19:10.

JJJJMMTT habe ich schon oft benutzt zum Sortieren nach Datum. Auch ein
Rechnen damit, z.B. Tage dazu zählen / abziehen funktioniert dann auch.
Abdul :
Habe mein Programm mal als fertige .exe in einer Zip-Datei angehängt,
falls du es als Notlösung vorübergehend brauchen solltest. Einfach
im Menü DATEI - Laden die zu konvertierende Datei laden und kurz
warten (ca. 5 Sekunden). Die fertig konvertierte Datei wird als
Test.csv gespeichert.

von tomatotoffel (Gast)


Lesenswert?

> mit Bezug zum ~28th February 1900
>

Knapp vorbei,

>
diverse Epochen:

https://en.wikipedia.org/wiki/Epoch_(computing)


30 December 1899 Microsoft COM DATE, Object Pascal, LibreOffice Calc, 
Google Sheets[20]
31 December 1899 Dyalog APL,[21] Microsoft C/C++ 7.0[22]
0  January  1900 Microsoft Excel,[2] Lotus 1-2-3[23]
1  January  1900 Network Time Protocol, IBM CICS, Mathematica, RISC OS, 
VME, ...
1  January  1904 LabVIEW, Apple Inc.'s  .... Microsoft Excel 
(optionally),[24] IGOR Pro
...
1  January  1970 Unix Epoch aka POSIX time
...



ALt wird aber immer noch stimmen:
http://www.cpearson.com/excel/datetime.htm

The year 1900 was not a leap year. In Excel, the day after 1900-Feb-28 
is 1900-Feb-29.  In reality, the day after 1900-Feb-28  was 1900-Mar-1 . 
This is not a "bug".  Indeed, it is by design.  Excel works this way 
because it was truly a bug in Lotus 123.

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

GPS hat auch "Epochen" Da gab es Chipsätze, die nach einem bestimmten 
Datum irgendwann nicht mehr richtig funktionierten. Kurz vor dem "Jahr 
2000 Problem" gab es ein "epoch 1024 problem".
https://en.wikipedia.org/wiki/Time_formatting_and_storage_bugs#First_GPS_rollover

: Bearbeitet durch User
von Wolfgang (Gast)


Lesenswert?

tomatotoffel schrieb:
> Wozu eigentlich?

Weil der TO die Zeit in der Einheit Sekunden haben wollte und 
Excel/Libreoffice für Datum/Zeit Tage als Einheit verwenden.

Christoph db1uq K. schrieb:
> GPS hat auch "Epochen" Da gab es Chipsätze, die nach einem bestimmten
> Datum irgendwann nicht mehr richtig funktionierten.

Das "bestimmte Datum" wiederholt sich nach 1024 Wochen, weil dann der 
10-Bit Wochenzähler vom GPS überläuft. Das erste Mal ist es um 0h UTC in 
der Nacht vom 21. auf den 22. August 1999 passiert.
https://en.wikipedia.org/wiki/GPS_week_number_rollover

von Abdul K. (ehydra) Benutzerseite


Lesenswert?

Danke Heinz!

Ich habe mit dem Pythoncode von Yalu schon alles konvertiert. Die 
maximal möglich abrufbaren Daten über 12 Jahre zu konvertieren, dauerte 
nur ein paar Sekunden. Die Ergebnisse finden sich alle im Solar-Thread 
morgen.

von Abdul K. (ehydra) Benutzerseite


Angehängte Dateien:

Lesenswert?

Heinz B. schrieb:
> Habe mein Programm mal als fertige .exe

Wirft unnachvollziehbare Fehlermeldungen. Du hast es auch doppelt 
eingepackt.

von Abdul K. (ehydra) Benutzerseite


Lesenswert?


Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.