Aktualisierungstabelle basierend auf 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, sowie den Namen des Zeitraums zu bestimmten Zeitstempeln (die unterstrichene Zeile 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 zeigt eine Protokolldatei, in der Daten ebenfalls mit Zeitstempeln (unterstrichene Zeile ist Kopfzeile) rund 6000000 Datenpunkte aufgezeichnet werden
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 Spalte „Jetzt“ mit dem Periodenwert aus Tabelle A basierend auf dem Wert des Zeitstempels in B hinzufügen.
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 Periodenwert in Zeile (N) diesem Datensatz in der Tabelle zugewiesen B (Zeitstempel in B liegt zwischen zwei Zeitstempeln in A)
Irgendwelche Vorschläge?
Danke
WindowsBetreff: Tabelle basierend auf Zeitstempel aktualisierenDieses Problem wurde gelöst, indem die Schleife in geändert wurde
For( i = 1, i <= N Rows( rows ), i++,
theRow = rows[i];
//show(theRow);
//show(subscript(dta,theRow,15));
subscript(dtb,i,8) = subscript(dta,theRow,17);
subscript(dtb,i,9) = subscript(dta,theRow,15);
subscript(dtb,i,10) = subscript(dta,theRow,16);
);
Wenn es jedoch eine schnellere Möglichkeit gibt, es auszuführen, würde ich mich freuen, es zu lernen. Danke.
Betreff: Tabelle basierend auf Zeitstempel aktualisierenVielen Dank, ErraticAttach und txnelson
Jim, könnte es sein, dass die Indizierung irgendwie rückwärts erfolgt?
Die Loc-Sortierung ruft für jede Zeile in B die Zeilennummer in Tabelle A ab, die die Informationen enthält, die ich in Tabelle B einfügen möchte
Allerdings erhalte ich innerhalb der Schleife eine Fehlermeldung bezüglich des Bereichs.
1. Wenn ich das richtig verstehe, sollten „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 von mir gewünschten Daten enthält.
4. Jetzt müssen wir nur noch den Wert in der entsprechenden Spalte von A in dieser Zeile lesen und ihn in die i-te Zeile von B in der gewünschten Spalte einfügen.
Ich erhalte jedoch die Fehlermeldung „Der bereichsbezogene Datentabellenzugriff erfordert eine Datentabellenspalte oder -variable beim Zugriff oder bei der Auswertung von …“
Wenn ich mir den Code ansehe, denke ich, dass das Skript die falsche Zahl als Index angibt.
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];
);
sollte eigentlich gelesen werden
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];
);
aber das hilft 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.
Betreff: Tabelle basierend auf Zeitstempel aktualisierenHier ist eine mögliche Lösung mit @ErraticAttack Vorschlag zur zu verwendenden 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 aktualisierenSortieren Sie die Nachschlagetabelle und verwenden Sie sie Loc Sortiert() . Überprüfen Sie die Funktion im Scripting-Index, um zu sehen, wie sie funktioniert.