Bonjour à tous;
Je souhaite implémenter un buffer circulaire. J'ouvre un fichier et je stoke les données dans un vecteur. Je souhaite mettre ces données dans un autre tableau de taille fixe en deux étapes:
1 - je dois mettre des elments dans le buffer s'il n'est pas plein.
2 - si le buffer est plein, je commence par écraser le premier élement par la donnée qui vient d'arriver.
Voici le code que j'ai essayé de faire;
A l'exécution j'obtiens une seule valeur dans mon buffer, et qui de plus est fausse, car non contenue dans le fichier de lecture.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53 #include <iostream> #include <fstream> #include<string> #include<vector> using namespace std; typedef vector<float> Tableau; int main() { Tableau tab; float x; int TailleBuffer = 100; float Buffer[100]; int i; ifstream data("D:\\SignauxTexte\\ecg.txt",ios::in); //ouverture du fichier en lecture; i=0; while(true) { data >> x; // test si fin de fichier atteinte if(data.eof() == true) break; // ajout de la donnée dans un tableau tab.push_back(x); for(int n=0; n<tab.size(); ++n) { if (tab.size()<TailleBuffer) // on compare la taille du tableau à la taille du Buffer { Buffer[n]=tab[n]; // on met l'element tab[n] dans la case de buffer correspondant; } else { Buffer[(i-1)%TailleBuffer] = tab[i-1]; // on ecrase l' élement (i-1)%TailleBuffer par le nouveau element } cout<<scientific; cout<<i<<" "<< x <<" "<<Buffer[n]<<" "<<tab[i-1]<<endl; } i++; //on compte le nombre de lignes } data.close(); return 0; }
J'arrive par contre à stocker correctement les données dans le tableau. mais je ne sais pas exactement comment mettre ces données dans le buffer.
Merci d'avance pour votre aide.
Partager