Home > Community > FPScript > Datensatz mit FPScript nach Vorgabe erstellen > Antwort auf: Datensatz mit FPScript nach Vorgabe erstellen

#35165
Bernhard KantzBernhard Kantz
Teilnehmer

Mit der Funktion Date() wird durch ‘Nullsetzen’ der Zeit das Datum aus einer Kalenderzeit bestimmt, liefert also genau den Startzeitpunkt des gewünschten Datensatzes. Mit der gewünschten Schrittweite von 8 h kann mit der Series()-Funktion die 1er-Zeitpunkte als Datenreihe berechnet werden:

Dim zeit_ein = Series(Date(datum_start), datum_end, 8 h)

Zu beachten ist allerdings, das die Datenreihe in der Länge so berechnet wird, dass der letzte Wert den geringsten Abstand zum gewünschten Endpunkt hat; er kann also auch über diesem liegen. Wenn die ein Problem sein sollte, muss man von der Datenreihe alle bis aufs letzte Element weiterverwenden:

If zeit_ein[-1] > datum_end Then
	zeit_ein = zeit_ein[0, -2]
End

Man lege sich dann Datenreihen für die x- und y-Komponente des gewünschten Resultats an:

Dim M = NumberOfRows(zeit_ein)
Dim x = CalendarTime ? # 2 * M
Dim y = ? # 2 * M

Durch Adressieren der geraden und ungeraden Elemente können die Ein- und Aus-Zeitpunkte in jeweils einer Zuweisung gesetzt werden:

Dim i_ein = (M, 0L, 2L)
Dim i_aus = i_ein + 1L

x[i_ein] = zeit_ein
y[i_ein] = 1

x[i_aus] = zeit_ein + 1 s
y[i_aus] = 0

Signal(y, x)

Generell sollte man stets versuchen, auf eine Schleife über Datenreihen zu verzichten. Dabei leisten wie hier gezeigt die Indizierung mittels Datenreihen gute Dienste. Diese Indexdatenreihen können etwa auch mit den Funktionen der Ereignisisolation erzeugt werden.