-
FlexPro
- Zoom sur FlexPro
- Fonctionnalités & Options
- Domaines d’application
- Tous les avantages
- Nouveau dans FlexPro 2021
- Testez FlexPro gratuitement
- FlexPro View OEM Freeware
- Conseils d’achat
- Login
- Langue
- +49 6894 929600
- infoweisang.com
- Google Maps
- Produits
- News
- Support
- Société
- Emplois
- Contact
- Login
- Langue
- +49 6894 929600
- infoweisang.com
- Google Maps
Datensatz mit FPScript nach Vorgabe erstellen
- This topic has 1 reply, 2 voices, and was last updated 2 years ago by Bernhard Kantz.
-
AuthorPosts
-
December 1, 2022 at 11:11 am #35164Thomas BalvenParticipant
Ich würde gerne mit einem Skript einen Datensatz mit Hilfe der Kalenderzeit erzeugen lassen. Ich lese einen Datensatz mit dem Namen ‘Datum’ ein und ziehe mir mit einer Formel (‘Startdatum):
Dim Startdatum Startdatum = Datum.X[0, 0]
und einer Formel (‘Enddatum’)
Dim Enddatum Enddatum = Datum.X[-1]
die relevanten Start-und Enddaten in der Form hh:mm:ss heraus. Im Anschluss würde ich gerne einen neuen Datensatz in folgender Form erzeugen:
Kalenderzeit Y-Wert 01.12.2022 00:00:00 1 01.12.2022 00:00:01 0 01.12.2022 08:00:00 1 01.12.2022 08:00:01 0 01.12.2022 16:00:00 1 01.12.2022 16:00:01 0 02.12.2022 00:00:00 1 02.12.2022 00:00:01 0 02.12.2022 08:00:00 1 02.12.2022 08:00:01 0 02.12.2022 16:00:00 1 02.12.2022 16:00:01 0
Der neue Datensatz soll immer bei ‘Startdatum’ 00:00 Uhr beginnen und mir eine 1 als Wert zurückgeben. 1 Sekunde später soll der Wert 0 sein. Im Anschluss soll im 8 Stunden-Takt das gleiche geschehen bis ‘Enddatum’ erreicht ist.
Kann man das im FPScript lösen?
Vielen Dank für die Hilfe.
December 1, 2022 at 3:41 pm #35165Bernhard KantzParticipantMit 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.
-
AuthorPosts
- You must be logged in to reply to this topic.