Aktualisieren Sie die Tabelle basierend auf dem ZeitstempelHallo,
Ich habe zwei Tische. (A und 
Tabelle A enthält (2000 Ereignisse während der Dauer eines Tests) Ereignisse, die den Beginn eines Zeitraums markieren, und den Namen des Zeitraums zu bestimmten Zeitstempeln (die unterstrichene Linie ist die Überschrift).
Zeitstempel, Zeitraum
30-12-2021 17:35:49.1, A
30.12.2021 17:39:36.8, B
...
Periode A liegt also zwischen „30-12-2021 17:35:49.1“ und „30-12-2021 17:39:36.8“
Tabelle B ist eine Protokolldatei, die Daten auch mit Zeitstempeln (unterstrichene Linie ist Kopfzeile) von etwa 6000000 Datenpunkten aufzeichnet
Zeitstempel, Sensor1, Sensor2, Sensor3 ,...
30-12-2021 17:37:21.2, Wert, Wert, Wert,...
30-12-2021 17:37:22.2, Wert, Wert, Wert,...
30-12-2021 17:37:23.2, Wert, Wert, Wert,...
Ich möchte Tabelle B eine Now-Spalte mit dem Period-Wert aus Tabelle A hinzufügen, basierend auf dem Wert des Zeitstempels in B.
Wenn der Zeitstempel in B größer oder gleich dem Zeitstempel in Zeile (N) in Tabelle A UND auch kleiner als der Zeitstempel in Zeile (N+1) von Tabelle A ist, wird der Zeitraumwert in Zeile (N) diesem Datensatz in Tabelle zugewiesen B (Zeitstempel in B liegt zwischen zwei Zeitstempeln in A)
Irgendwelche Vorschläge?
Danke
WindowsBetreff: Tabelle basierend auf Zeitstempel aktualisierenSortieren Sie die Nachschlagetabelle und verwenden Sie sie Loc sortiert () . Überprüfen Sie die Funktion im Skriptindex, um zu sehen, wie sie funktioniert.
Betreff: Tabelle basierend auf Zeitstempel aktualisierenHier ist eine mögliche Lösung mit @ErraticAttach Vorschlag zur anzuwendenden Methode.
Names Default To Here( 1 );
dta = Data Table( "table A" );
dtb = Data Table( "table B" );
// Place all timestamp values from Table A & B
timesa = dta:timestamp << get values;
timesb = dtb:timestamp << get values;
// Find the row to add the data to
rows = Loc Sorted( timesa, timesb );
// Add the new columns to Table A
dta << New Column( "sensor1" );
dta << New Column( "sensor2" );
dta << New Column( "sensor3" );
// Loop through matrix rows and add the records to the appropriate
// row in Table A
For( i = 1, i <= N Rows( rows ), i++,
theRow = rows[i];
dta:sensor1[theRow] = dtb:sensor1[i];
dta:sensor2[theRow] = dtb:sensor2[i];
dta:sensor3[theRow] = dtb:sensor3[i];
);
Betreff: Tabelle basierend auf Zeitstempel aktualisierenVielen Dank ErraticAttach und txnelson
Jim, könnte es sein, dass die Indexierung irgendwie rückwärts läuft?
Die sortierte Loc erhält für jede Zeile in B die Zeilennummer in Tabelle A, die die Informationen enthält, die ich in Tabelle B einfügen möchte
Ich erhalte jedoch einen Fehler innerhalb der Schleife bezüglich des Umfangs.
1. Wenn ich das richtig verstehe, sollte "Zeilen" die gleiche Anzahl von Zeilen haben wie Tabelle B
2. Der Parameter "i" erhöht sich von 1 auf die Anzahl der Zeilen in B.
3. In jeder Iteration der Schleife wird dem Parameter "theRow" die entsprechende i-te Zahl in "rows" zugewiesen.
Es enthält also tatsächlich eine Zahl, die eine bestimmte Zeile in Tabelle A darstellt, die die gewünschten Daten enthält.
4. Jetzt müssen wir also nur noch den Wert in der entsprechenden Spalte in A in dieser Zeile lesen und ihn in die i-te Zeile von B in der gewünschten Spalte einfügen.
Ich erhalte jedoch eine Fehlermeldung zu „Der bereichsbezogene Datentabellenzugriff erfordert eine Datentabellenspalte oder -variable für den Zugriff oder die Auswertung von …“.
Wenn ich mir den Code ansehe, denke ich, dass das Skript auf die falsche Nummer als Index verweist.
also habe ich zwischen [i] und [theRow] gewechselt
"
For( i = 1, i <= N Rows( rows ), i++,
theRow = rows[i];
dta:sensor1[theRow] = dtb:sensor1[i];
dta:sensor2[theRow] = dtb:sensor2[i];
dta:sensor3[theRow] = dtb:sensor3[i];
);
eigentlich lesen sollte
For( i = 1, i <= N Rows( rows ), i++,
theRow = rows[i];
dta:sensor1[i] = dtb:sensor1[theRow];
dta:sensor2[i] = dtb:sensor2[theRow];
dta:sensor3[i] = dtb:sensor3[theRow];
);
das hilft aber auch nicht.
Ich bin immer noch nicht mit JSL vertraut, könnte es also sein, dass die Art und Weise, wie ich die Werte oder die Spalte und Zeile angebe, falsch ist?
Vielen Dank.