Bonjour,
Je souhaite faire une API en C++ avec un affichage de données en "pseudo temps-réel". L'ensemble des mes données sont déjà enregistrées par colonnes (séparées par des tabulations) avant que je lance mon programme. Je veux donc rejouer les données en simulation.
Mes données sont rangées par colonne, chaque ligne représentant des états de capteurs à un instant précis. Ma fonction actuelle (download_datas()) me permet de lire 1 ligne du fichier txt et de récupérer les données sous forme de double dans un tableau (qui est utilisé derrière par d'autres fonctions).
Je voudrais faire en sorte de pouvoir basculer d'une ligne à une autre pour lire les données à un instant, puis au suivant... mais sans avoir à relire toutes les données à chaque appel de ma fonction.
En effet, avec des centaines de paramètres et des dizaines de milliers de lignes je ne peux pas lire et mémoriser tout d'un coup au lancement de mon API (Stack overflow...).
Il me faut donc pourvoir choisir de lire à tout instant de telle à telle ligne du fichier text, sans devoir scanner tout le fichier text à chaque appel de ma fonction (toutes les 20ms, si possible) car si je fais quelque chose du genre:
"charger puis scaner tous les strings en partant du début jusqu'à tomber à tel string qui correspond au premier élement de la ligne 78956ième ligne)" ça va pas aller du tout au niveau temsp réel...
Voici ma fonction actuelle de récupération des données:
FILE*fichier;
static int NOMBRE_DE_COLONNES=301;
static double donnees[300];
void mon_programme::download_datas(void)
{
// Stockage des données dans un tableau temporaire de strings appelé
// "ligne":
using namespace std;
string ligne[301];
char nom[256]="mon_fichier_text.txt";
ifstream fichier(nom);
for (int i=1 ; i<NOMBRE_DE_COLONNES ; i++)
{
fichier>>ligne[i];
}
fichier.close();
// Convertion des strings en double et insertion dans le tableau appelé
// "donnees":
vector<string>parametre(ligne,ligne+NOMBRE_DE_COLONNES);
vector<string>::iterator iter;
iter=parametre.begin();
iter++;
for(int r=1 ; r<NOMBRE_DE_COLONNES ; r++)
{
string aaa=*iter;
std::string c(aaa);
std::istringstream i(c);
double nombre;
i >> nombre;
donnees[r]=nombre;
iter++;
}
}
Si j'ai été assez clair et précis, quelqu'un aurait-il une idée de ce que je pourrais faire? J'ai pensé aussi à utiliser les listes (#include <list>) que je trouve assez pratiques pour se déplacer avec des itérateurs, mais cette fois aussi ça implique que j'ai enregistré avec "fichier>>ligne[i];" toutes les lignes de mon fichier txt pour ensuite me déplacer dans ligne[]...
Y aurait-il un moyen par exemple de se déplacer dans le fichier txt avec par exemple des pointeurs sans devoir le charger au préalable? J'ai cherché dans les forums mais je n'ai trouvé rien qui correspondait à mon besoin...
Merci d'avance, ne serait-ce pour avoir lu jusqu'au bout :)