table de mise à jour basée sur l'horodatageSalut,
J'ai deux tables. (A et 
Le tableau A contient (2000 événements sur la durée d'un test) les événements marquant le début d'une période et le nom de la période à des horodatages spécifiques (la ligne soulignée est l'en-tête)
Horodatage, période
30-12-2021 17:35:49.1, UN
30-12-2021 17:39:36.8, B
...
donc la Période A est comprise entre "30-12-2021 17:35:49.1" et "30-12-2021 17:39:36.8"
Le tableau B est un fichier journal enregistrant des données également avec des horodatages (la ligne soulignée est l'en-tête) autour de 6000000 points de données
horodatage, capteur1, capteur2, capteur3 ,...
30-12-2021 17:37:21.2, valeur, valeur, valeur,...
30-12-2021 17:37:22.2, valeur, valeur, valeur,...
30-12-2021 17:37:23.2, valeur, valeur, valeur,...
Je voudrais ajouter une colonne maintenant à la table B avec la valeur Période de la table A basée sur la valeur de l'horodatage dans B.
Si l'horodatage dans B est supérieur ou égal à l'horodatage dans la ligne (N) de la table A ET également inférieur à l'horodatage dans la ligne (N + 1) de la table A, la valeur de la période dans la ligne (N) sera attribuée à cet enregistrement dans la table B (l'horodatage dans B est compris entre deux horodatages dans A)
Aucune suggestion?
Merci
les fenêtresRe : table de mise à jour basée sur l'horodatageTrier la table de recherche et utiliser Loc trié() . Vérifiez la fonction dans l'index de script pour voir comment cela fonctionne.
Re : table de mise à jour basée sur l'horodatageVoici une solution possible en utilisant @ErraticAttach suggestion sur la méthode à utiliser.
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];
);
Re : table de mise à jour basée sur l'horodatageMerci beaucoup ErraticAttach et txnelson
Jim, se pourrait-il que l'indexation soit à l'envers d'une manière ou d'une autre ?
le Loc trié obtient pour chaque ligne de B le numéro de ligne du tableau A contenant les informations que je veux mettre dans le tableau B
Cependant, j'obtiens une erreur dans la boucle concernant la portée.
1. si je comprends bien, "lignes" devrait avoir le même nombre de lignes que le tableau B
2. le paramètre "i" passe de 1 au nombre de lignes dans B.
3. à chaque itération de la boucle, le paramètre "theRow" se voit attribuer le iième numéro correspondant dans "rows".
il contient donc en fait un nombre représentant une ligne spécifique dans le tableau A qui contient les données que je veux.
4. alors maintenant, tout ce que nous devons faire est de lire la valeur dans la colonne appropriée en A sur cette ligne et de la mettre dans la ième ligne de B dans la colonne que je veux.
Cependant, j'obtiens une erreur à propos de "l'accès à la table de données délimitée nécessite une colonne ou une variable de table de données dans l'accès ou l'évaluation de ..."
en regardant le code, je pense que le script fait référence au mauvais numéro comme index.
donc j'ai basculé entre [i] et [theRow]
"
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];
);
faut lire en fait
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];
);
cependant cela n'aide pas non plus.
Je ne suis toujours pas familier avec JSL, alors se pourrait-il que la façon dont je spécifie les valeurs ou la colonne et la ligne soit incorrecte?
Merci beaucoup.