Bonjour,
je reviens encore avec mon fichier rempli de valeurs de mesures, et j'aimerai savoir comment on peut tracer une courbe dans un Chart avec ces valeurs inscrites dans mon fichier ?
![]()
Bonjour,
je reviens encore avec mon fichier rempli de valeurs de mesures, et j'aimerai savoir comment on peut tracer une courbe dans un Chart avec ces valeurs inscrites dans mon fichier ?
![]()
Salut,
fait une petite recherche sur ce forum, il y as plein de sujet sur le remplissage de TChart![]()
Bonjour,
j'ai regardé les sujets sur le remplissage de TChart, mais il y a des choses que je ne comprend pas, et mon problème est que je veux charger des valeurs qui sont dans un fichier dans le TChart.
![]()
Ta première problématique est de lire les valeurs dans le fichier, ça tu sais maintenant le faire.
La deuxième est de rentré tes valeurs dans le TChart, pour cela, il faut que tu créé un TSeries par courbe voulu dans ton TChart et que tu entre les valeur grâce à la fonction AddXY
Oui je sais bien qu'il faut utiliser "AddXY", mais c'est quoi cette histoire de vecteurs que j'ai vu dans un post ?
pas plus compliqué que sa
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 int iX = 1, iY = 100; Form1->Series1->AddXY(iX, iY, "Valeur1", clRed);
Cordialement Baxter
Les vecteur c'est parce que les valeurs de la personne présentant le problème été stocké dans un vecteur, mais si tu les as stocké autre par, tu modifie en fonction de tes besoins
Bon, j'ai fais ceci :
Et j'ai l'erreur "Valeur de type void pas autorisée".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 SeriePH->ParentChart = ChartPH; SeriePH->ParentChart->AllowPanning; // Autorise le déplacement SeriePH->ParentChart->AllowZoom; // Autorise le zoom SeriePH->AddXY((Colonnes(Fichier->Strings[5])) , Tab[0], "Valeur", clRed);
En X je voudrai le numéro de la ligne du fichier, et en Y la colonne (ici première colonne) de cette même ligne.
![]()
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 AnsiString asTMP; for(int i=0; i< iNbrLigne; i++) { asTmp = "Valeur " + IntToStr(i); SeriePH->AddXY(i , Tab[0], "Valeur ", clRed); }
quelque chose comme sa ?
Cordialement Baxter
Oui, ça donne :
Ça fonctionne mais ça me donne un graphe avec le calcul de la moyenne des valeurs. Henderson m'avait passé cette fonction et je pense qu'il faut changer (ou plutôt rajouter) des choses pour afficher les valeurs du fichiers et pas la moyenne :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 AnsiString asTMP; for(int i=3; i< Fichier->Count; i++) { asTMP = "Valeur " + IntToStr(i); SeriePH->AddXY(i , Tab[0], "Valeur ", clRed); }
Pouvez vous aussi m'aider à commenter les lignes de cette fonction car je ne les comprend pas toutes ?
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 void __fastcall TFormClient::Colonnes(AnsiString Chaine) { Chaine.Trim(); AnsiString Nombre; int d = 0; // Balayage pour TabMoy int p = Chaine.Pos(" "); while(p != NULL) { Nombre = Chaine.SubString(1, p); Tab[d] += Nombre.ToDouble(); d++; Chaine = Chaine.SubString(p+1, Chaine.Length()); p = Chaine.Pos(" "); } Tab[d] += Chaine.ToDouble(); }
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 void __fastcall TFormClient::Colonnes(AnsiString Chaine) { //enleve les espaces de trop Chaine.Trim(); AnsiString Nombre; int d = 0; // Balayage pour TabMoy //index du premier espace int p = Chaine.Pos(" "); //tan que on trouve des espaces while(p != NULL) { //extraction du premier nombre (debut au premier espace) Nombre = Chaine.SubString(1, p); //stockage de la valeur Tab[d] += Nombre.ToDouble(); d++; //on enleve le nombre qu'on a deja extrait Chaine = Chaine.SubString(p+1, Chaine.Length()); //on cherche le prochain espace p = Chaine.Pos(" "); } //on stoke le dernier nombre Tab[d] += Chaine.ToDouble(); }
voila je croie que c'est a peu pré sa
Cordialement Baxter
Ok merci Baxter.
J'ai une autre question, mon programme fonctionne, mais j'ai fait deux fonctions :
la première pour la moyenne :
Et la deuxième pour juste balayer les valeurs :
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 void __fastcall TFormClient::ColonnesMoy(AnsiString Chaine) { // Enlève les espaces de trop Chaine.Trim(); AnsiString Nombre; int d = 0; // Index du premier espace int p = Chaine.Pos(" "); // Tant que l'on trouve des espaces while(p != NULL) { // Extraction du premier nombre (début au premier espace) Nombre = Chaine.SubString(1, p); // Stockage de la valeur TabMoy[d] += Nombre.ToDouble(); d++; // On enlève le nombre qu'on a déjà extrait Chaine = Chaine.SubString(p+1, Chaine.Length()); // On cherche le prochain espace p = Chaine.Pos(" "); } // On stoke le dernier nombre TabMoy[d] += Chaine.ToDouble(); }
N'y a t'il pas un moyen pour optimiser ceci ? Mettre ces deux fonctions en une seule ?
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 void __fastcall TFormClient::ColonnesGraph(AnsiString Chaine) { // Enlève les espaces de trop Chaine.Trim(); AnsiString Nombre; int d = 0; // Index du premier espace int p = Chaine.Pos(" "); // Tant que l'on trouve des espaces while(p != NULL) { // Extraction du premier nombre (début au premier espace) Nombre = Chaine.SubString(1, p); // Stockage de la valeur TabGraph[d] = Nombre.ToDouble(); d++; // On enlève le nombre qu'on a déjà extrait Chaine = Chaine.SubString(p+1, Chaine.Length()); // On cherche le prochain espace p = Chaine.Pos(" "); } // On stoke le dernier nombre TabGraph[d] = Chaine.ToDouble(); }
![]()
ben moi perso la fonction moyenne jla comprend pas
je ne vois nul part ou est fais la division
et je pensais que tu voulais faire la moyenne de la premiere valeur de chaque ligne
et en regardant sa, pour moi sa fais pas sa...
non mais oui car je la fait quand j'appui sur le bouton ouvrir le fichier :
Je sais pas ce qui serait le plus propre à faire ?
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 // Ligne par ligne for(int i = 3; i < Fichier->Count ; i++) { ColonnesMoy(Fichier->Strings[i]); } // Moyenne des colonnes for(int i = 0; i < 4; i++) { TabMoy[i] = TabMoy[i] / (Fichier->Count-3); } // Affichage des différentes moyennes FormClient->EditPH->Text = FormatFloat("0.000",TabMoy[0]) ; FormClient->EditConductivite->Text = FormatFloat("0.000",TabMoy[1]) ; FormClient->EditTemperature->Text = FormatFloat("0.000",TabMoy[2]); FormClient->EditOxygene->Text = FormatFloat("0.000",TabMoy[3]);
Il est vrai que la division devrait être fait dans la fonction puisque celle-ci s'appelle ColonnesMoy et que pour calculer une moyenne il faut une division, mais la manière dont la fonction est faite empêche cela.
Sinon je te propose cette fonction qui te fait les deux :
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 void __fastcall TFormClient::Colonnes(AnsiString Chaine) { // Enlève les espaces de trop Chaine.Trim(); AnsiString Nombre; int d = 0; // Index du premier espace int p = Chaine.Pos(" "); // Tant que l'on trouve des espaces while(p != NULL) { // Extraction du premier nombre (début au premier espace) Nombre = Chaine.SubString(1, p); // Stockage de la valeur TabMoy[d] += Nombre.ToDouble(); TabGraph[d] = Nombre.ToDouble(); d++; // On enlève le nombre qu'on a déjà extrait Chaine = Chaine.SubString(p+1, Chaine.Length()); // On cherche le prochain espace p = Chaine.Pos(" "); } // On stoke le dernier nombre TabMoy[d] += Chaine.ToDouble(); TabGraph[d] = Chaine.ToDouble(); }
Je vous dit grand merci à tous pour vos conseils
A très bientôt, bon weekend pour certains, et bon courage pour d'autres !
A+
![]()
Partager