CONTROL DIESE intègre une classe particulière de fichiers de données séquentielles, BufferizedDataFile, qui permet d'accéder dynamiquement, parmi les données contenues dans le fichier externe,
- à des enragistrements correspondant à une date passée : il s'agit d'une opération de remémorisation (autrement dit de souvenir) ;
- ou bien à des enregistrements correspondant à une date future : il s'agit d'une opération de prédiction.
Les services prédéfinis de remémorisation et de prédiction sont présentées ici. Dans chaque trio de fonctions, une est dédiée aux champs à valeur entière, une autre aux champs à valeur flottantes, la dernière aux champs à valeur flottantes 'double précision'.
Mémorisation
Les fonctions suivantes renvoient, pour le fichier dont le symbole de classe est donné en premier argument, la somme des valeurs mémorisées pour le champ donné en second argument, entre les bornes (comprises) spécifiées par les deux derniers arguments. La borne 0 correspond à l'enregistrement lu au pas courant de la simulation, la borne 1 correspond au pas précédent, etc.
int SumUpMemoryIntFieldValue(UserFileId id, int fieldId, int lb, int ub);
float SumUpMemoryFloatFieldValue(UserFileId id, int fieldId, int lb, int ub);
double SumUpMemoryDoubleFieldValue(UserFileId id, int fieldId, int lb, int ub);
Les fonctions suivantes ont le même rôle, avec le chemin d'accès au fichier externe en premier argument.
int SumUpMemoryIntFieldValue(char* path, int fieldId, int lb, int ub);
float SumUpMemoryFloatFieldValue(char* path, int fieldId, int lb, int ub);
double SumUpMemoryDoubleFieldValue(char* path, int fieldId, int lb, int ub);
Prédiction
Les méthodes suivantes renvoient, pour le fichier dont le symbole de classe est donné en premier argument la somme des valeurs prédites pour le champ donné en second argument, entre les bornes (comprises) spécifiées par les deux derniers arguments. La borne 0 (qui correspondrait au pas courant) est interdite. La borne 1 correspond à l'enregistrement qui sera lu au pas suivant de la simulation, etc._
int SumUpPredictionIntFieldValue(UserFileId id, int fieldId, int lb, int ub);
float SumUpPredictionFloatFieldValue(UserFileId id, int fieldId, int lb, int ub);
double SumUpPredictionDoubleFieldValue(UserFileId id, int fieldId, int lb, int ub);
Les fonctions suivantes ont le même rôle, avec le chemin d'accès au fichier externe en premier argument.
int SumUpPredictionIntFieldValue(char* path, int fieldId, int lb, int ub);
float SumUpPredictionFloatFieldValue(char* path, int fieldId, int lb, int ub);
double SumUpPredictionDoubleFieldValue(char* path, int fieldId, int lb, int ub);
Exemple
Soit le fichier externe représenté par la classe MyFile de symbole MY_FILE.
Ses trois champs ont pour symboles FLD_DATE FLD_F et FLD_I, et de type char*, float et int.
Les enregistrement correspondent à des jours successifs.
Une partie continue des enregistrements est listée ici :
22/03/2001 12.4 7 22/03/2001 6.7 20 23/03/2001 14.9 13 24/03/2001 12.5 2 25/03/2001 20.0 19 26/03/2001 2.5 11 27/03/2001 8.3 6 28/03/2001 13.3 17 29/03/2001 7.4 1Alors, les appels suivants renvoient les valeurs affichées, compte tenu que:
- l'unite d'horloge de la simulation est '1 DAY' :
- la valeur courante de l'horloge de la simulation correspond au 25 mars 2001
{ ... int mi = SumUpMemoryIntFieldValue(MY_FILE, FLD_I, 1, 3); float mf = SumUpMemoryFloatFieldValue(MY_FILE, FLD_F, 3, 3); int pi = SumUpPredictionIntFieldValue(MY_FILE, FLD_I, 1, 3); float pf = SumUpPredictionFloatFieldValue(MY_FILE, FLD_F, 3, 3); printf("\nmi = %d mf = %3.1f\tpi = %d pf = %3.1f", mi, mf, pi, pf); }>>mi = 35 mf = 6.7 pi = 34 pf = 13.3